【问题标题】:On page refresh, destructuring props gives unhydrated values in componentDidMount在页面刷新时,解构道具会在 componentDidMount 中提供未水合的值
【发布时间】:2019-05-09 20:37:41
【问题描述】:

我的应用程序中有一个奇怪的错误,我在 React 中没有遇到过。

基本上,当页面刷新时,我会从 URL 中获取某些参数,对查询发出 API 请求,然后用结果填充我的 Redux 状态。

例如:

 async componentDidMount() {
    const {
      values1, values2, match,
    } = this.props;

    await getSingleData(match.params.id);
    await getData(values1, values2);
  }

所以从 URL 参数中,我获取了 Id,然后发出 API 请求以获取数据并将其存储在 Redux 中。但是,当我使用 desctructured 语法时,我会得到空值或 null 值。使用解构语法时,它似乎在数据混合之前引用了空的 Redux 存储,而完整引用在数据混合之后给出了正确的值。

当我使用完整的 this.props.values1this.props.values2 参考时,它工作正常。

例如,这段代码,一切都像它应该的那样工作:

 async componentDidMount() {
    const {
      values1, values2, match,
    } = this.props;

    await getSingleData(match.params.id);
    await getData(this.props.values1, this.props.values2);
  }

我很困惑为什么会这样。据我了解,解构对象将具有与非描述对象相同的引用。但显然情况并非如此。有什么意见吗?

【问题讨论】:

    标签: javascript reactjs redux


    【解决方案1】:

    在调用函数时立即发生解构,此时 this.props 为空。

    调用await getSingleData(match.params.id)(在解构之后运行)this.props 被填充。

    因此,您可以访问this.props.value1

    解构不会跟踪或观察原始对象的变化。

    【讨论】:

    • 这是有道理的。那么理想情况下,解构应该在第一次 API 调用之后发生?
    • 那么解构是复制对象而不是引用吗?如果它是一个引用,那么解构对象中是否也应该存在更改?
    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2023-01-04
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多