如果父状态值更改,如何更新子组件

编码器92

我有一个仪表板,其中正在使用搜索字段过滤数据。关于状态数据的更改,我想重新加载通过状态属性作为数据值的图形组件。

const intialState = {
    graphData:  null,
    costCenterList: [],
    costCenterValue: []
};
class Dashboard extends Component {
  constructor(props){
    super(props);
    this.state = intialState;
    this.handleCostCenterChange = this.handleCostCenterChange.bind(this);
  }
  handleCostCenterChange(event, values){     
    var filtered = this.state.graphData.filter(el => values.includes(el.costCode));
    this.setState({graphData: filtered});
  }

  render() { 
    <Grid item md={2}>
        <div>
          <InputLabel id="costCenterLabel" style= {{textAlign:'left', fontWeight:'bold'}}>Cost Center</InputLabel>
           <FormControl style={{minWidth:'200px', width:'100%'}} variant="outlined" >
              <Autocomplete
                  multiple
                  options={this.state.costCenterList.map((p) => p)}
                  renderInput={params => (
                    <TextField {...params} margin="normal" variant="outlined" fullWidth autoComplete="off" />
                  )}
                  onChange={this.handleCostCenterChange}
              />
           </FormControl>
        </div>
      </Grid>

      <Grid item md={12}>
        <BarGraph graphData={this.state.graphData}/>
      </Grid>
  }

 }

条形图的代码如下:

export default class BarGraph extends Component {
  state = {
    dataForChart: {
      datasets: [
      ]
    }
  }

  render() {
    return (
      <div>
        <h3>Hours Per Cost Center</h3>
        <Bar ref="chart" data={this.state.dataForChart} options = {this.state.barChartOptions} height={242} width={486}/>
      </div>
    );
  }


  componentDidMount() {
    try {

      let graphData = this.props.graphData;
      let newState = Object.assign({}, this.state);

      newState.dataForChart.datasets =[{barPercentage: 1, label:'Hours Per Cost Center ', data : graphData, backgroundColor : oBarColours, borderWidth:2, borderColor:oBarColours}];
      newState.dataForChart.labels = oCostCenterDistinct;

      this.setState(newState);
      } catch (error) {
      console.log("Network error: " + error);
    }
  }

}

我想在状态的graphData更改时更新组件。在使用this.setState进行更改时,其状态更新值,但不包含具有新数据的组件。

有人可以帮助我在这里丢失的内容吗?

德鲁·里斯(Drew Reese)

需要回应道具更新。将数据处理分解为一个实用程序函数,该函数会在组件安装时调用,然后在更新为prop时调用。

export default class BarGraph extends Component {
  state = {
    dataForChart: {
      datasets: []
    }
  };

  setData() {
    try {
      const { graphData } = this.props;
      const newState = { ...this.state };

      newState.dataForChart.datasets = [
        {
          barPercentage: 1,
          label: "Hours Per Cost Center ",
          data: graphData,
          backgroundColor: oBarColours,
          borderWidth: 2,
          borderColor: oBarColours
        }
      ];
      newState.dataForChart.labels = oCostCenterDistinct;

      this.setState(newState);
    } catch (error) {
      console.log("Network error: " + error);
    }
  }

  componentDidMount() {
    this.setData();
  }

  componentDidUpdate(prevProps) {
    if (prevProps.graphData !== this.props.graphData) {
      this.setData();
    }
  }

  render() {
    return (
      <div>
        <h3>Hours Per Cost Center</h3>
        <Bar
          ref="chart"
          data={this.state.dataForChart}
          options={this.state.barChartOptions}
          height={242}
          width={486}
        />
      </div>
    );
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

子组件更新时更改父状态

来自分类Dev

根据Vuex状态值更新动态组件禁用状态

来自分类Dev

子组件值更新后如何调用父组件页面功能(例如:更改日期选择器)

来自分类Dev

在 React 的父组件中访问子状态值

来自分类Dev

如何从功能组件的父级更改子状态组件

来自分类Dev

响应子组件在父状态更改后不更新

来自分类Dev

父状态更改时子组件不会更新

来自分类Dev

子组件未因父状态更改而更新

来自分类Dev

从多个子组件更新父组件状态而不考虑更新后的状态值

来自分类Dev

如何在React中使用钩子从父组件获取其值的父组件中更新正确的状态值?

来自分类Dev

如何从reactJS中的子组件更新父状态

来自分类Dev

父状态更新时更新子组件

来自分类Dev

父状态更新时更新子组件

来自分类Dev

在React中,父对象如何以编程方式更改另一个组件上的prop或状态值?

来自分类Dev

如何从子组件更改父组件的状态?

来自分类Dev

如何从子组件更改父组件的状态?

来自分类Dev

父状态不更新子组件

来自分类Dev

父状态更改后,组件不会更新

来自分类Dev

Mysql:如果更新了父级状态,则更改所有子级记录的状态

来自分类Dev

Mysql:如果更新了父级状态,则更改所有子级记录的状态

来自分类Dev

根据状态值动态添加类,并根据父状态变化更改子内容

来自分类Dev

如何设置子组件的子组件的父组件状态

来自分类Dev

父组件状态更新时,子组件的道具不更新

来自分类Dev

当父组件的状态更新时,React 子组件不会更新

来自分类Dev

更新父级状态后如何将React子级组件重置为原始状态

来自分类Dev

React - 如何更新子组件的父组件 onclick 中的状态 - 我做错了什么?

来自分类Dev

更新子组件状态后如何调用父组件的setState方法?

来自分类Dev

父级状态更改后,子级组件道具未更新

来自分类Dev

如何按状态值更改选中(选定)单选按钮

Related 相关文章

  1. 1

    子组件更新时更改父状态

  2. 2

    根据Vuex状态值更新动态组件禁用状态

  3. 3

    子组件值更新后如何调用父组件页面功能(例如:更改日期选择器)

  4. 4

    在 React 的父组件中访问子状态值

  5. 5

    如何从功能组件的父级更改子状态组件

  6. 6

    响应子组件在父状态更改后不更新

  7. 7

    父状态更改时子组件不会更新

  8. 8

    子组件未因父状态更改而更新

  9. 9

    从多个子组件更新父组件状态而不考虑更新后的状态值

  10. 10

    如何在React中使用钩子从父组件获取其值的父组件中更新正确的状态值?

  11. 11

    如何从reactJS中的子组件更新父状态

  12. 12

    父状态更新时更新子组件

  13. 13

    父状态更新时更新子组件

  14. 14

    在React中,父对象如何以编程方式更改另一个组件上的prop或状态值?

  15. 15

    如何从子组件更改父组件的状态?

  16. 16

    如何从子组件更改父组件的状态?

  17. 17

    父状态不更新子组件

  18. 18

    父状态更改后,组件不会更新

  19. 19

    Mysql:如果更新了父级状态,则更改所有子级记录的状态

  20. 20

    Mysql:如果更新了父级状态,则更改所有子级记录的状态

  21. 21

    根据状态值动态添加类,并根据父状态变化更改子内容

  22. 22

    如何设置子组件的子组件的父组件状态

  23. 23

    父组件状态更新时,子组件的道具不更新

  24. 24

    当父组件的状态更新时,React 子组件不会更新

  25. 25

    更新父级状态后如何将React子级组件重置为原始状态

  26. 26

    React - 如何更新子组件的父组件 onclick 中的状态 - 我做错了什么?

  27. 27

    更新子组件状态后如何调用父组件的setState方法?

  28. 28

    父级状态更改后,子级组件道具未更新

  29. 29

    如何按状态值更改选中(选定)单选按钮

热门标签

归档