【问题标题】:Update child component from parent component react从父组件更新子组件反应
【发布时间】:2019-12-04 08:14:10
【问题描述】:

您好,我是新来的反应,我有一些情况。我想将数据从父级更新到子级,但子级数据更改不会更新到父级。

这是我的父组件 =>

export default class ShiftMaster extends React.Component{

  constructor(props){
    super(props);

    this.state = {
    monshift : new TempShift(),
}


   }

handelChange = event =>{          

  this.setState({
      [event.target.id]:event.target.value  
  },()=>{

  });
}
                               <ShiftDaily                              

                                shiftday={this.state.monshift}
                                />

这是 TempShift 对象

export class TempShift{
  constructor(
              offin_f=0,
              offout_f=0,
              offin_1h=0,
              offout_1h=0,
              offin_2h=0){
              this.offin_f = offin_f;
                this.offout_f = offout_f;
                this.offin_1h = offin_1h;
                this.offout_1h = offout_1h;
                this.offin_2h = offin_2h;
    }

这是名为 ShiftDaily 的子组件

export default class ShiftDaily extends React.Component{

    constructor(props){
      super(props);

      this.state = {                  
              offin_f:props.shiftday.offin_f,
              offout_f:props.shiftday.offout_f,
                  offin_1h:props.shiftday.offin_1h,
                  offout_1h:props.shiftday.offout_1h,
                  offin_2h:props.shiftday.offin_2h}
    }

handleChange = event =>{     
    this.setState({

          [event.target.id]:event.target.value  

    },()=>{

    });
  }

<Form.Control   id="offout_f"
                            className="form-control-sm"                                              
                            value={this.state.offout_f} 
                            onChange={this.handleChange}/>

我无法将父级的句柄更改传递给子级,因为子组件中的值更改不会反映在父级数据中。

但是当我更改父 monshift 时,我想更新为子值并显示数据。我可以知道如何实现这一目标吗?谢谢

【问题讨论】:

    标签: reactjs react-component


    【解决方案1】:

    您应该直接使用props.* 状态,而不是将它们分配给ShiftDaily 内的this.state

    原因是因为constructor 在渲染期间只运行一次,因此您所做的任何更改都不会通过传递给ShiftDailyprops.* 反映出来(因为this.state 永远不会再次更新,因为它设置了一次在构造函数中)

    所以,你需要
    1. 完全摆脱constructorthis.state = {...} 分配。
    2. 删除ShiftDaily.handleChange,因为道具将从ShiftMaster 更新,并在道具更改时逐渐下降到ShiftDaily
    3. 直接使用this.props.* 值。

        <Form.Control   
          id="offout_f"
          className="form-control-sm"                                              
          value={this.props.shiftday.offout_f} />
    

    【讨论】:

    • 谢谢,我正在按照您的建议尝试。根据您的建议,我可以知道如何将数据从父母传递给孩子。当前通过是否正确?因为 this.props.offout_f 总是未定义。而且我不需要更改子组件?
    • @Jze 我已经更新了上面的答案。我错了,因为我使用了this.props.offout_f 而不是this.props.shiftday.offout_f
    • 另外,您可以通过以下链接更清楚地了解其工作原理:reactjs.org/docs/components-and-props.html, reactjs.org/docs/composition-vs-inheritance.html
    猜你喜欢
    • 2020-09-01
    • 1970-01-01
    • 2023-02-20
    • 2017-09-10
    • 2022-01-16
    • 2017-04-17
    • 2019-03-11
    • 1970-01-01
    • 2018-04-22
    相关资源
    最近更新 更多