我知道JavaScript的作用域,但可能我完全不理解它们,因为这段代码不起作用。函数不传递给Button的原因是什么
此代码使用React和Relay Modern框架。
有2个按钮,第一个内部queryRender
,其被传递到中继现代QueryRenderer
和第二个之后(见函数render
)。第二个工作正常,第一个不执行clickTest
函数。 (这是简化的实际代码版本)
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>
)
}
}
query
该变量被定义,我只是没有包括在该摘录。
当我第一次substitue按钮的onClick功能与匿名一个
<Button onClick={() => this.clickTest()}>this DOESN'T work</Button>
然后我得到这样的错误:遗漏的类型错误:_this2.clickTest不是一个函数
任何人都可以向我为什么这个代码解释行为的方式呢?
谢谢,我没想过绑定'queryRender'函数。这解决了我的问题。 – Pawel