在React.js中更改父级状态

时间:2015-12-29 02:47:58

标签: javascript javascript-events reactjs state flux

所以我有一个很大的分析页面。在顶部,有一些表单元素可供您选择要查看报告的内容。

下面是一些图表和表格。

所以我设置了像这样的层次结构

Page
    Otherstuff1
    Report
        Setting1 
        Setting2
        Graph1
        Graph2
        Table
    Otherstuff2

我认为此报告的state应该保存在Report组件中,因为它是包含需要访问此状态的所有内容的最低组件。

那么当Report发生变化时,如何更新Setting1的状态?

这是我的代码的简化版本,与问题相关。

var Report = React.createClass({

  getInitialState: function() {
    return {
      dateRange: "not changed",
    }
  },

  changeDateRange: function(event) {
    console.log("changed");
    this.setState({dateRange: "changed"});
  },

  render: function() {
    return (
      <div>
        <ReportDateRange change={this.changeDateRange}/>
        {this.state.range}
      </div>
    );
  }

});

var ReportDateRange = React.createClass({
  render: function() {
    return (
      <select className="form-control" id="historicalRange"
          onChange={this.props.change}>
        <option value="yesterday">Yesterday</option>
        <option value="week">Last week</option>
        <option value="fortnight">Last fortnight</option>
        <option value="month" selected>This month</option>
      </select>
    )
  }
});

此代码运行,并且它会在控制台中登录某些内容已更改,但它不会更新Report的状态。我认为可能会更新ReportDateRange的状态。

1 个答案:

答案 0 :(得分:3)

控制流看起来对我来说。

我认为您错误的是您如何引用状态变量。

render()函数中,您引用this.state.range但其他地方的变量为dateRange而不是range