3 回答
TA贡献1816条经验 获得超6个赞
this.changeContentthis.changeContent.bind(this)onChangethiswindow
React.createClass
constructor() {
this.changeContent = this.changeContent.bind(this);}render() {
return <input onChange={this.changeContent.bind(this)} />;}React.refsReact.refs.somerefthis.refs.somerefsendContentthis
TA贡献1804条经验 获得超3个赞
React.createClass()React.Component.
thisReact.createClass()extends React.Component.
React.createClass()thisReact.Componentthisnull
解决这一问题的途径
将函数绑定到类构造函数中
。许多人认为这是一种最佳实践方法,它完全避免触及JSX,并且不会为每个组件重新呈现创建一个新功能。 class SomeClass extends React.Component { constructor(props) { super(props); this.handleClick = this.handleClick.bind(this); } handleClick() { console.log(this); // the React Component instance } render() { return ( <button onClick={this.handleClick}></button> ); }}将函数内联绑定
。您仍然可以在一些教程/文章/等等中发现这种方法,因此您必须了解它。它的概念与#1相同,但要注意的是,绑定函数在每次重呈现时都会创建一个新函数。 class SomeClass extends React.Component { handleClick() { console.log(this); // the React Component instance } render() { return ( <button onClick={this.handleClick.bind(this)}></button> ); }}使用胖箭头函数
。直到箭头函数,每个新函数都定义了自己的函数。 this价值。但是,箭头函数不创建自己的 this上下文,所以 this具有来自Reaction组件实例的原始含义。因此,我们可以: class SomeClass extends React.Component { handleClick() { console.log(this); // the React Component instance } render() { return ( <button onClick={ () => this.handleClick() }></button> ); }}或 class SomeClass extends React.Component { handleClick = () => { console.log(this); // the React Component instance } render() { return ( <button onClick={this.handleClick}></button> ); }}使用实用程序函数库自动绑定函数
。有一些实用程序库可以自动为您完成任务。以下是一些流行的,仅举几个例子: 自动装配器 是将类的方法绑定到 this,即使在分离方法时也是如此。包裹 使用 @autobind在绑定方法之前 this指向正确的引用 组件的上下文。 import autobind from 'autobind-decorator';class SomeClass extends React.Component { @autobind handleClick() { console.log(this); // the React Component instance } render() { return ( <button onClick={this.handleClick}></button> ); }}AutoBindDecorator非常聪明,可以让我们一次绑定组件类中的所有方法,就像方法1一样。 类自动绑定 是另一个广泛用于解决此绑定问题的NPM包。与AutoBindDecorator不同,它不使用装饰器模式,而是真正使用 只需在构造函数中使用一个自动绑定的函数。组件的方法以正确引用 this.import autobind from 'class-autobind';class SomeClass extends React.Component { constructor() { autobind(this); // or if you want to bind only only select functions: // autobind(this, 'handleClick'); } handleClick() { console.log(this); // the React Component instance } render() { return ( <button onClick={this.handleClick}></button> ); }}PS:其他非常类似的图书馆是 反应自绑定 .
建议
其他
你的第一个倾向可能是在你的应用程序中使用参考文献来“让事情发生”。如果是这样的话,花点时间更仔细地考虑一下在组件层次结构中应该在哪里拥有状态。
statethis.state.inputContent.
添加回答
举报
