Je suis conscient des limites de JavaScript, mais je ne les comprends probablement pas entièrement car ce code ne fonctionne pas.Quelle est la raison pour laquelle cette fonction n'est pas transmise à un bouton?
Ce code utilise les frameworks React et Relay Modern.
Il y a 2 boutons, le premier à l'intérieur queryRender
qui est passé dans le relais moderne QueryRenderer
et le second ensuite (voir la fonction render
). Le second fonctionne, le premier n'exécute pas la fonction clickTest
. (ceci est une version simplifiée du code réel)
class Candidates extends Component {
static propTypes = {
viewer: PropTypes.object
}
constructor (props) {
super(props)
this.clickTest = this.clickTest.bind(this)
}
clickTest() {
console.log('click works')
}
queryRender ({error, props}) {
if (error) {
return <pre>{error.message}</pre>
} else if (props) {
return (
<div>
<Button onClick={this.clickTest}>this DOESN'T work</Button>
</div>
)
}
return <Loader active>Loading...</Loader>
}
render() {
return (
<div>
<QueryRenderer
environment={environment}
query={query}
render={this.queryRender}
/>
<Button onClick={this.clickTest}>this works</Button>
</div>
)
}
}
La variable query
est définie, je n'ai pas inclus dans cet extrait.
Quand je Substitue la fonction de premier bouton onClick avec un anonyme un
<Button onClick={() => this.clickTest()}>this DOESN'T work</Button>
puis-je obtenir une telle erreur: Uncaught TypeError: _this2.clickTest est pas une fonction
Quelqu'un peut-il me expliquer pourquoi ce code se comporte comme il le fait?
Merci, je n'ai pas pensé à lier la fonction 'queryRender'. Cela a résolu mon problème. – Pawel