3 回答
TA贡献1816条经验 获得超6个赞
this.changeContent
this.changeContent.bind(this)
onChange
this
window
React.createClass
constructor() { this.changeContent = this.changeContent.bind(this);}
render() { return <input onChange={this.changeContent.bind(this)} />;}
React.refs
React.refs.someref
this.refs.someref
sendContent
this
TA贡献1804条经验 获得超3个赞
React.createClass()
React.Component
.
this
React.createClass()
extends React.Component
.
React.createClass()
this
React.Component
this
null
解决这一问题的途径
将函数绑定到类构造函数中
。许多人认为这是一种最佳实践方法,它完全避免触及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:其他非常类似的图书馆是 反应自绑定 .
建议
其他
你的第一个倾向可能是在你的应用程序中使用参考文献来“让事情发生”。如果是这样的话,花点时间更仔细地考虑一下在组件层次结构中应该在哪里拥有状态。
state
this.state.inputContent
.
添加回答
举报