问题标签 [getderivedstatefromprops]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
53 浏览

react-native - getDerivedStateFromProps 何时清除数据?

getDerivedStateFromProps 对于组件是静态的。但是今天我调试应用程序,当我们定义它时,我在 getDerivedStateFromProps 方法中找到了其他组件数据 nextProp.x。

另一种情况是在重新创建组件时,nextProp.x 仍然是预数据。

那么当 react-native 会移除 getDerivedStateFromProps 数据时,为什么数据是混杂的呢?

0 投票
1 回答
76 浏览

reactjs - getDerivedStateFromProps 有什么用(或者你如何解雇它?)

我有以下“列表”组件,我正在尝试从道具更新 this.state。我似乎无法让 getDrivedStateFromProps 与 componentDidUpdate 一起正常工作。逻辑存在问题,但 gDSFC 似乎不会触发,因为无论它是否被注释掉,我都会得到相同的响应。

0 投票
0 回答
188 浏览

javascript - 如何用 getDerivedStateFromProps 替换 componentWillReceiveProps

我如此努力地阅读和尝试,但仍然找不到成功将 componentWillReceiveProps 替换为 getDerivedStateFromProps 的方法。这是我的代码,componentWillReceiveProps 一个工作正常。但是我尝试的 getDerivedStateFromProps 不起作用(在 componentDidMount() 运行正常后,state.movi​​es 最终变为 [] 为空)。感谢您的帮助!

以下是我尝试使用 getDerivedStateFromProps 的方法,但无法正常工作(在 componentDidMount() 运行正常后, state.movi​​es 最终变为 [] 为空)。....TT

太感谢了!

0 投票
2 回答
73 浏览

reactjs - 是否存在强制 getDerivedStateFromProps 的情况?

如 React 文档中所述,应谨慎使用此 API,因为可以使用更简单的替代方案来实现相同的结果。这是我理解并完全同意的。
但是,作为一个独立的 API,在某些情况下它应该是强制性的。令我困惑的是,即使是文档中提到的这个 API 的“罕见用例”也不能令人信服它是完全需要的。
以第二个用例为例:https ://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#fetching-external-data-when-props-change
此生命周期方法仅用于在渲染新道具之前清除陈旧数据。但是我们不能只清除componentDidUpdate中的陈旧数据吗?即使它会在道具比较相等的情况下触发不必要的重新渲染,但它是值得接受的解决方案。

我稍微修改了一下以显示这两种解决方案产生相同的最终结果:https ://codesandbox.io/embed/sharp-paper-p5hv2?fontsize=14&hidenavigation=1&theme=dark

您认为在哪里适合使用此 API?

0 投票
2 回答
56 浏览

reactjs - 我无法停止使用 componentWIllReceiveProps / getDerivedStateFromProps

我是 React 的新手(实际上是编程世界),我只是发现我们根本不需要使用 componentWIllReceiveProps / getDerivedStateFromProps,但我有这个问题:

我有一个父组件 LoginForm,我在其中获取我的 API 并使用它的响应来重定向(如果成功),或者在登录失败时显示 Modal(LoginFailure 组件)。因此,我需要将我的父 LoginForm 传递给模态子 loginFailure 道具,该道具在 API 响应之后发生变化,当我的 LoginFailureComponent 已经呈现时,就好像它永远不知道父亲道具发生了变化。代码如下,抱歉太长了:

这是我的子组件,现在使用 willReceiveProps:

我阅读了所有关于我们应该如何替换这些的 React 文档,但我无法将它应用到我的案例中,如果你能指导我解决这个问题,我将非常感激!

感谢社区!

0 投票
1 回答
161 浏览

reactjs - React 并发模式是否允许派生状态?

今天,如果需要,我们可以在 React Hooks/函数组件的渲染阶段getDerivedStateFromProps使用类组件和状态更新来创建派生状态。

我对 React Hook 变体特别好奇:这在 React 并发模式下是否允许?

如果我使用StrictModeScrollView包装常见问题解答中的组件,则不会有任何警告。但是,我还是有一点胃疼的感觉,这种模式在并发模式下可能会出现问题。 <React.StrictMode>...</React.StrictMode>

所以问题是:

关于 Hooks FAQ 链接,在 React 并发模式下是否仍然可以派生状态?


例子:

0 投票
1 回答
69 浏览

reactjs - 如何仅在第一次渲染childComponent时跳过childComponent中getDerivedStatefromProps()中的状态更新

嗨,我是 Reactjs 的新手。每次加载此组件时,我希望以下 childComponent 的 {this.state.data} 递增 5。所以我在静态方法 getDerivedStateFromProps(props,state) 下这样做但是第一次加载时 {this.state.data} 应该是我定义的初始值(这里是 0)。所以我希望下面的行输出从 0 开始递增 5(我定义的初始值)

来自 ClassChild 的数据:{data}

预期输出: ClassChild 中的数据:0 ClassChild 中的数据:5 ClassChild 中的数据:10 ClassChild 中的数据:15

实际输出: ClassChild 中的数据:5 ClassChild 中的数据:10 ClassChild 中的数据:15 ClassChild 中的数据:20

无论如何要跳过getDerivedStateFromProps(props,state)的第一次执行,而不是在构造函数中定义-5值以获得预期的输出?

0 投票
0 回答
32 浏览

reactjs - 每次本地状态更改时都会调用 getDerivedStateFromProps

ownUpdate: true目前,当我们从同一个组件更改状态并相应地在 getDerivedStateFromProps 中检查它时,我正在设置状态。下面是我在组件中使用的代码。任何人都可以提出更好的方法来做到这一点。提前致谢。

0 投票
0 回答
55 浏览

javascript - 如何在不调用 getDerivedStateFromProps 的情况下使用 stateState 更新数据?

我正在构建一种电子商务应用程序。众所周知,每个电子商务应用程序都有愿望清单功能。在我的产品列表中,卡片项目上有一个点赞按钮。当用户单击它时,它会调用 API 将isLiked属性设置为true(布尔值)并更新数据库。

当用户单击该卡片项目时,它应该将他导航到它的详细信息页面,该页面也有类似按钮。我在...中调用详细 API 是componentDidMount这样的:

如果from detail APIred的属性是 ,我应该用颜色渲染 like 按钮。因此,为此,我在构造函数中使用 props 值设置我的状态:isLikedtrue

我添加isLikedForCompare比较是因为我们无法this在 getDerivedStateFromProps 中访问。

我有那个selectedItem总是满足条件的代码块,因为初始值总是空的。这段代码适用于其他功能,所以我需要让他们不管,这就是为什么我的代码是这样的。所以,继续……现在我可以isLiked从道具中获得价值。在我看来,点赞按钮现在是红色的。但问题是当我单击该按钮时。我的期望是当我单击该按钮时,按钮变为白色,因为我只是使用更改我的状态,this.setState但为什么在 setState 之后调用 getDerivedStateFromProps?

这是一个问题,因为: isLiked: prevState.isLikedForCompare !== isLiked ? isLiked : prevState.isLikedForCompare将永远是错误的。所以我的状态isLike永远都是真的!

如何解决这个问题?

0 投票
1 回答
346 浏览

react-native - getDerivedStateFromProps() 与 componentDidUpdate()

componentWillReceiveProps在我的应用程序中的很多地方都在使用它。现在,我必须用getDerivedStateFromProps()or替换它们componentDidUpdate()。首先,我想使用getDerivedStateFromPropsas it s 替代componentWillReceivePropsasSuggested react-nativedocs。但是有些人强烈建议不要使用这种方法,而是建议使用componentDidUpdate. 但是对于我的要求,所有新道具都必须使用state之前的渲染进行设置。getDerivedStateFromProps是最好的地方。

因此,在getDerivedStateFromProps和之间使用哪一个componentDidUpdate