我知道 JavaScript 的作用域,但我可能不完全理解它们,因为这段代码不起作用。
此代码使用 React 和 Relay Modern 框架。
有 2 个按钮,第一个在内部queryRender
传递到 Relay Modern 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
变量已定义,我只是没有将其包含在该摘录中。
当我用匿名函数替换第一个按钮的 onClick 函数时
<Button onClick={() => this.clickTest()}>this DOESN'T work</Button>
然后我得到这样的错误: Uncaught TypeError: _this2.clickTest is not a function
谁能向我解释为什么这段代码的行为方式如此?