为什么我需要在bind(this)
处理程序中为handleChange
添加onChange
以获得正确的this
关键字?
class SearchBar extends React.Component{
constructor(props){
super(props);
}
handleChange(){
console.log(this)
this.props.onUserInput(
this.refs.filterTextInput.value,
this.refs.inStockOnlyInput.checked
);
}
render() {
return (
<form>
<input
type="text"
placeholder="Searrch...."
value={this.props.filterText}
ref="filterTextInput"
onChange={this.handleChange.bind(this)} // the bind(this) is needed if not this in handleChange became undefined
/>
<p>
<input
type="checkbox"
checked={this.props.inStockOnly}
ref="inStockOnlyInput"
onChange={this.handleChange}
/>
{' '}
only show products in stock
</p>
</form>
);
}
}
答案 0 :(得分:3)
这是因为使用新的React extends Component
语法,他们在组件创建时删除了自动绑定,就像它们在旧.createClass
语法中一样。默认情况下,使用es2015中的类语法,您必须将此绑定到方法才能使用此类,因此这里也是如此。
您可以在this changelog博文中了解React做出此更改的决定。