setState不适用于ReactJs中this.state中的对象

时间:2018-03-17 13:01:16

标签: javascript reactjs setstate react-component

我正在使用React中的表单并面对这个奇怪的问题。

这是我的组件类的外观 -



export default class Home extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
        username: 'Bla'
    };

    this.handleChange = this.handleChange.bind(this);
  }

  handleChange(event) {
    this.setState({[event.target.name]: event.target.value})
  }

  render() {
      return (
         <div>
            <form onChange={this.handleChange}>
              <label> Name: <input type="text" value={this.state.username} name="username" /> </label>
              <input type="submit" value="Submit" />
            </form>
         </div>
      );
   }
}
&#13;
&#13;
&#13;

这就是渲染页面在浏览器中的显示方式。

enter image description here

我可以更新/更改文本框中的文字。

现在我稍微调整了我的组件类,基本上我更改了this.state对象并相应地更新了HTML输入元素。

这些是已完成的更改 -

&#13;
&#13;
this.state = {
   formEle: {
      username: 'Bla'
   }
};
&#13;
&#13;
&#13;

&#13;
&#13;
<label> Name: <input type="text" value={this.state.formEle.username} name="username" /> </label>
&#13;
&#13;
&#13;

在浏览器中渲染页面后进行这两项更改后,除了我无法更新/更改文本框中的内容外,所有内容都相同。

我的预感是this.setState函数必定存在问题,但是当我打印event.target.nameevent.target.value的值时,我会得到预期值。不确定到底出了什么问题。

1 个答案:

答案 0 :(得分:3)

您无法再更新输入框的原因是您不再设置正确的状态变量。

如果您将handleChange事件监听器更改为这样,则应该重新开始工作:

handleChange(event) {
  this.setState({ 
    formEle: {
      ...this.state.formEle,
      [event.target.name]: event.target.value,
    },
  });
}

您指定要从this.state.formEle.username读取状态,因此您需要确保设置状态树的特定部分。

希望这有帮助 - 并且编码愉快!