【发布时间】:2018-03-12 03:18:35
【问题描述】:
我知道 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
谁能向我解释为什么这段代码会这样?
【问题讨论】:
标签: javascript reactjs relaymodern