为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我在道具更改后得到旧的状态值

为什么我在道具更改后得到旧的状态值

互换的青春 2022-06-09 17:08:58
我只是想了解为什么在应用程序中我有以下情况,下面是我的类组件构造函数:  constructor(props) {    super(props);    this.state = {      tableAlerts: props.householdAlerts,      initialAlerts: props.householdAlerts    }    console.log('householdAlerts', props.householdAlerts)  }在渲染功能中我有:const { householdAlerts } = this.props;我的问题是在构造函数中我得到了空数组,但在render函数中我有数据。是否可以在构造函数中获取数据?
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

在使用类组件时,这是一个非常糟糕的模式。当您将值复制到状态时,您将忽略任何道具更新。管理它:

  1. 它要求您管理同一变量的两个数据源:状态和道具。因此,您需要在每次 prop 更改时通过将其设置为 state 来添加另一个渲染(不要忘记测试 prev 和 next 值的相等性以避免陷入无限循环)。

  2. getderivedstatefromprops您可以使用生命周期方法避免每次道具更改时设置状态。

所以建议是:just use the props; do not copy props into state

要了解更多为什么不应该这样做,我强烈推荐这篇文章


查看完整回答
反对 回复 2022-06-09
?
暮色呼如

TA贡献1853条经验 获得超9个赞

不建议像这样在构造函数中设置初始组件状态,因为在更新此属性/状态后您将失去使用 { setState } 方法的能力。


最佳实践确实是使用 { this.prop.householdAlerts } 直接引用 prop,并为本地(或在子组件中)情况保留状态使用。


如果您出于某种原因想以组件状态存储道具,请在 lifeCycle 中调用它 -


  componentDidMount() { 

        const { tableAlerts, initialAlerts } = this.props;

        this.setState({ tableAlerts, initialAlerts });

     }


查看完整回答
反对 回复 2022-06-09
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

如果您希望初始状态具有道具值。请使用“this”关键字尝试类似的操作


  constructor(props) {

    super(props);

    this.state = {

      tableAlerts: this.props.householdAlerts,

      initialAlerts: this.props.householdAlerts

    }


    console.log('householdAlerts', props.householdAlerts)

  }


查看完整回答
反对 回复 2022-06-09
  • 3 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信