在 React.js 中更改父母的状态

Posted

技术标签:

【中文标题】在 React.js 中更改父母的状态【英文标题】:Changing a Parent's State in React.js 【发布时间】:2016-04-02 21:41:43 【问题描述】:

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

下面是一些图表。

所以我有这样的层次结构:

Page
    Otherstuff1
    Report
        Setting1 
        Setting2
        Graph1
        Graph2
        Table
    Otherstuff2

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

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

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

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】:

控制流在我看来是正确的。

我认为您的错误在于您引用状态变量的方式。

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

【讨论】:

哇,感谢您注意到这一点。我在这里,对 React 还没有信心,认为我错过了一些巨大的概念。但就是这样!非常感谢。

以上是关于在 React.js 中更改父母的状态的主要内容,如果未能解决你的问题,请参考以下文章

React.js:在更改状态的输入字段中单击取消时如何返回先前的状态值[重复]

React js,如何在输入更改时更新状态对象值? [复制]

如何使用/不使用 useEffect 钩子在 React JS 函数中获取更改的(新)状态值?

React js从父组件更改子组件的状态

React js从父事件中更新子状态

React.js 使用非状态变量获取错误作为组件正在更改要控制的文本类型的不受控制的输入