使用“this”关键字反应类行为

时间:2016-03-08 18:27:22

标签: javascript reactjs react-native

为什么我需要在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>
    );
  }
}

1 个答案:

答案 0 :(得分:3)

这是因为使用新的React extends Component语法,他们在组件创建时删除了自动绑定,就像它们在旧.createClass语法中一样。默认情况下,使用es2015中的类语法,您必须将此绑定到方法才能使用此类,因此这里也是如此。

您可以在this changelog博文中了解React做出此更改的决定。