React中使用useState钩子更新状态的工作原理



我理解React中使用useState钩子更新状态的工作原理如下。

  1. 将要更改的状态值与当前状态值进行比较
  2. 如果两个状态值相同,请在不更改状态值的情况下不要重新渲染
  3. 如果两个状态值不同,请更改状态值并执行重新渲染

https://codesandbox.io/s/nostalgic-fog-riyg4

但在这个例子中,它的作用似乎有所不同。

  • 安装应用程序组件时执行第一次渲染
  • 单击按钮并执行第二次渲染时,状态值会发生变化。(因为当前状态值和要更改的状态值不同。(
  • 再次单击该按钮时,状态值不会更改,但会进行渲染->为什么会发生这种情况?我没想到会渲染,因为这两个状态值是相同的
  • 第三次单击该按钮时,状态值不会再次更改,但这次不会重新渲染组件。这是我期望在第二次点击后发生的行为
React组件每次更改stateprops时都会更新。react组件的这两个工件不能在render函数或render调用的任何函数中更改。

此外,您必须记住,您永远不能在组件本身中更改组件的道具。道具是从父级传递的,不能由子级更改。但对于state,您可以在onClick函数中调用setState或在render之外调用任何其他函数,并且无论何时调用setState,您的组件都会更新其视图。

在熟悉ReactJs之后,我建议您将Redux用于任何类型的数据操作和功能。以下是react redux网站的链接:https://react-redux.js.org/

我希望这能回答你的问题

用于更新通用usestate函数:const[initialState,setState]=使用状态(initialState(

initialState是组件和的初始状态

setState是更新initialState 的函数

有关react中useState挂钩的更多信息:链接:https://blog.bitsrc.io/understanding-react-hooks-usestate-6627120614ab

react的useState()钩子在每次react使用useState()钩子提供的更新方法更新状态之前进行浅层比较。在这个代码示例中,您可以进行以下更改以清楚地理解它。

您可以进行以下更改并尝试。

  1. useState(0),使其像useState({value:0})
  2. setNumber(1),使其类似于setNumber({value:1})
  3. 在16号{number}线上,把它做成{number.value}

对appComponent进行上述更改后,无论值是否更改,每次单击按钮时都会进行渲染。

这是因为useState()在对状态进行更新之前进行浅比较。

在对象的情况下,肤浅的比较总是返回false。因为在浅层比较过程中,对象是使用内存位置进行比较的,而不是通过对象内部的值进行比较。

相关内容

  • 没有找到相关文章

最新更新