【问题标题】:ReactJS setState changes not propagating from parent to child component [duplicate]ReactJS setState 更改不会从父组件传播到子组件[重复]
【发布时间】:2016-10-28 23:31:23
【问题描述】:

我有两个具有父子关系的简单 reactjs 组件。子元素包含一个带有 onChange 事件的输入和一个回调到父元素的 setState。当我运行它时, setState 似乎在父组件中工作,但传递给子组件的道具似乎没有更新。有任何想法吗?这是一个代码sn-p:

var FooInput = React.createClass({
  handleInputChange: function(e) {
    this.props.onInputChange(e.target.name, e.target.value);
  },
  render: function() {
    return (
      <div>
        <input name="foo" value={this.props.foo} onChange={this.handleInputChange} />
      </div>
    )
  }
})

var FooApp = React.createClass({
  getInitialState: function() {
    return {
      foo: 'bar',
    };
  },
  handleInputChange: function(key, value) {
    this.setState({key: value});
  },
  render: function() {
    return (
      <div>
        <FooInput
            foo={this.state.foo}
            onInputChange={this.handleInputChange} />
      </div>
    );
  }
});

在上面的例子中,尽管handleInputChangeFooApp父组件中被触发并且foo通过@传递到子组件中,FooInput子组件中的input值保持为“bar” 987654325@。为什么输入值没有变化以反映新的状态?

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    您实际上是通过执行this.setState({key: value}) 来设置一个名为key 的状态变量。如果你想要一个可变键,你可以使用括号:

    handleInputChange: function(key, value) {
        this.setState({[key]: value});
    }
    

    或者创建一个新对象。

    handleInputChange: function(key, value) {
        const newState = {};
        newState[key] = value;
        this.setState(newState);
    }
    

    【讨论】:

    • 我完全忘记了 Javascript 键被解释为字符串文字。非常感谢您指出这一点,这让我发疯了!
    猜你喜欢
    • 2017-06-08
    • 2021-01-21
    • 2019-01-04
    • 2020-01-02
    • 1970-01-01
    • 2017-04-28
    • 2017-10-01
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多