Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在设置状态后,React不会重新渲染组件_Javascript_Reactjs_Setstate - Fatal编程技术网

Javascript 在设置状态后,React不会重新渲染组件

Javascript 在设置状态后,React不会重新渲染组件,javascript,reactjs,setstate,Javascript,Reactjs,Setstate,我有一个奇怪的问题状态已更新,但未重新渲染组件。当我按下按钮添加Hi All时,必须添加额外的Hi All。但我在屏幕上看不到它们 有趣的是,如果我将new_row更改为这样的1元素数组 var new_row = [<p key = {key_number + "d"}> Hi all!</p>]; setState对数组执行浅层比较,当您将推入数组时,实例不会更改,因此React不会看到更改。使用concat时,将返回一个新的数组实例 您可以使用排列运算符而不是co

我有一个奇怪的问题<代码>状态已更新,但未重新渲染组件。当我按下按钮添加Hi All时,必须添加额外的Hi All。但我在屏幕上看不到它们

有趣的是,如果我将
new_row
更改为这样的1元素数组

var new_row = [<p key = {key_number + "d"}> Hi all!</p>];

setState
对数组执行浅层比较,当您将
推入数组时,实例不会更改,因此React不会看到更改。使用
concat
时,将返回一个新的数组实例

您可以使用排列运算符而不是
concat

 setState({
   key_number,
   parag_s: [...parag_s, new_row]
 })

不建议在渲染函数内更改状态。它也很容易导致无限循环(更改状态->渲染->更改状态->渲染…)@Cristy,但我不会更改渲染函数中的状态。我用addRow来做这个。在render中,我只读取this.state.ps属性(据我所知,这是React对象的数组)。请你再解释一下好吗?@JamesThank!当你改变状态,但React看不到它时,你能再举几个例子吗?@BlackBeard
setState
是一个复杂的过程,如果你想了解它的工作原理,我只能向你指出它的方向。
 setState({
   key_number,
   parag_s: [...parag_s, new_row]
 })