Je fais la liste en utilisant onsenui et réagis. mais je ne peux pas appeler un lien de onchanged.
Je n'arrivais pas à comprendre ... Quelqu'un peut-il résoudre ce problème?
c'est mon code. Je voudrais appeler la méthode handlechanged de l'élément d'entrée. Mais alors, Impossible de lire la propriété 'bind' of indéfinie est levée.
export default class MainPage extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedValue: "myself",
destinations: ["myself","somebody"],
};
}
handleChange(value) {
this.setState({selectedValue: value});
}
renderRadioRow(row) {
return (
<ListItem key={row} tappable>
<label className='left'>
<Input
inputId={`radio-${row}`}
checked={row === this.selectedValue}
onChange={this.handleChange.bind(this, row)}
type='radio'
/>
</label>
<label htmlFor={`radio-${row}`} className='center'>
{row}
</label>
</ListItem>
)
}
render() {
return (
<Page renderToolbar={this.renderToolbar}>
<p style={{textAlign: 'center'}}>
test
</p>
<List
dataSource={this.state.destinations}
renderRow={this.renderRadioRow}
/>
</Page>
);
}
}
https://facebook.github.io/react/docs/reusable-components.html#no-autobinding
Pas de liaison automatique
Les méthodes suivent la même sémantique que les classes ES6 classiques, ce qui signifie qu'elles ne la lient pas automatiquement à l'instance. Vous devrez utiliser explicitement .bind(this)
ou les fonctions de flèche =>:
Vous pouvez utiliser bind () pour préserver this
<div onClick={this.tick.bind(this)}>
Ou vous pouvez utiliser les fonctions de flèche
<div onClick={() => this.tick()}>
Nous vous recommandons de lier vos gestionnaires d'événements au constructeur afin qu'ils ne soient liés qu'une seule fois pour chaque instance:
constructor(props) {
super(props);
this.state = {count: props.initialCount};
this.tick = this.tick.bind(this);
}
Maintenant, vous pouvez utiliser this.tick
directement comme il était lié une fois dans le constructeur:
Il est déjà lié dans le constructeur
<div onClick={this.tick}>
Cela améliore les performances de votre application, en particulier si vous implémentez shouldComponentUpdate () avec une comparaison superficielle dans les composants enfants.
export default class MainPage extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedValue: "myself",
destinations: ["myself","somebody"],
};
this.renderRadioRow = this.renderRadioRow.bind(this);
}
handleChange(value) {
this.setState({selectedValue: value});
}
renderRadioRow(row) {
return (
<ListItem key={row} tappable>
<label className='left'>
<Input
inputId={`radio-${row}`}
checked={row === this.selectedValue}
onChange={() => {
this.handleChange(row);
}
type='radio'
/>
</label>
<label htmlFor={`radio-${row}`} className='center'>
{row}
</label>
</ListItem>
)
}
render() {
return (
<Page renderToolbar={this.renderToolbar}>
<p style={{textAlign: 'center'}}>
test
</p>
<List
dataSource={this.state.destinations}
renderRow={this.renderRadioRow}
/>
</Page>
);
}
}
Je ne sais pas quelle valeur est passée en ligne, mais vous devez passer le contexte de rendu afin d'appeler cette fonction et de la lier.
export default class MainPage extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedValue: "myself",
destinations: ["myself","somebody"],
};
}
handleChange(value) {
this.setState({selectedValue: value});
}
renderRadioRow(row,renderContext) {
return (
<ListItem key={row} tappable>
<label className='left'>
<Input
inputId={`radio-${row}`}
checked={row === this.selectedValue}
onChange={this.handleChange.bind(renderContext, row)}
type='radio'
/>
</label>
<label htmlFor={`radio-${row}`} className='center'>
{row}
</label>
</ListItem>
)
}
render() {
var renderContext=this;
return (
<Page renderToolbar={this.renderToolbar}>
<p style={{textAlign: 'center'}}>
test
</p>
<List
dataSource={this.state.destinations}
renderRow={() => this.renderRadioRow(row,renderContext)}
/>
</Page>
);
}
}