首页 文章

我们需要确保getDerivedStateFromProps不是递归的吗?

提问于
浏览
0

我试图了解新的React生命周期方法,并且无法弄清楚一些细节 . 在getDerivedStateFromProps的React文档中,它说:

在初始装载和后续更新时,在调用render方法之前调用getDerivedStateFromProps . 它应返回一个对象来更新状态,或者返回null以不更新任何内容 . 请注意,无论原因如何,都会在每个渲染上触发此方法 . 这与UNSAFE_componentWillReceiveProps形成对比,UNSAFE_componentWillReceiveProps仅在父项导致重新呈现而不是本地setState的结果时触发 .

(强调我的)

如果我理解正确,如果我只是从props派生状态并返回它(顾名思义我们应该这样做),我将触发无限循环,因为 this.state 将更新,这将触发重新渲染,这将调用 getDerivedStateFromProps ,将返回新的状态更新,...

我们是否需要确保如果更改与旧状态不同,我们只返回状态更新,或者我错过了什么?

1 回答

  • 2

    我将触发无限循环,因为this.state将更新,这将触发重新渲染,这将调用getDerivedStateFromProps

    这是不正确的 . 在渲染之前不在渲染之后调用 getDerivedStateFromProps . 引用反应文档(https://reactjs.org/docs/react-component.html#static-getderivedstatefromprops):

    在调用render方法之前调用getDerivedStateFromProps

    所以从技术上讲,无论你从 getDerivedStateFromProps 返回什么,都将包含在即将到来的渲染中的状态更新中 . 渲染不会触发另一个 getDerivedStateFromProps ,因此不会有无限循环 . 我认为你担心的情况可能会发生 componentDidUpdate ,如果你在其中调用 setState .

    然而,即使不会触发无限循环,也不意味着从道具中获取状态是好的 . 事实上,你应该尽量避免这种情况 . 看到这个博客:https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html

    通常,如果可以的话,您应该在渲染方法中动态计算您需要的任何内容 . 这将确保数据始终是正确和最新的 .

相关问题