2016-06-09 37 views
0

我有一个像这样构造的反应组件。 我想从下拉列表中选择用户的选择。反应:无法从窗体上的onchange事件处理程序设置状态选择

我收到以下错误消息,当我尝试:

“遗漏的类型错误:无法读取的未定义的属性‘的setState’”

我下面的文档的例子,所以我在哪里我错了?

export default class SearchPage extends Component { 

.... 

handleChange(e) { 
    this.setState({ 
     params: { 
      ...this.state.params, 
      [e.target.name]: e.target.value 
     } 
    }) 
} 

render() { 
    const { county, cause, activity } = this.state 

    return (
     <div className="searchpage"> 
      <form> 
       <select name="county" onChange={this.handleChange} 
       ..... 

回答

2

handleChange未绑定到实例。你需要要么使用内联函数的箭头,将捕获this词法

<select name="county" onChange={e => this.handleChange(e)} 

或(推荐的方式)构造函数中绑定的方法。

constructor() { 
    super(); 
    this.handleChange = this.handleChange.bind(this); 
} 
+0

我现在正在使用_.bind(this)_解决方法,但它抛出linting错误,显然使用_.bind(this)_对性能来说是相当糟糕的。使用_onChange = {e => this.handleChange(e)} _似乎是最好的选择 - 谢谢Yury! – simbro

+0

如果在构造函数中执行一次,则绑定即可。 https://facebook.github.io/react/docs/reusable-components.html#no-autobinding –

+0

实际上这是一个很好的方法,只是尝试在构造函数中绑定,运行良好 – simbro

0

这是另一种伎俩,以避免与.bind结合你的函数(本),或者一些装饰或创建类似匿名函数()=> MYFUNC()

handleChange => (e) { } 

然后你可以使用它作为你想在里面