请帮助,我想问为什么反应状态没有重新渲染。
控制台显示更新的状态,但不显示。
我在相同的场景中有类似的代码,这只是为了简化。
import React, {useState} from "react";
const [x, setX] = useState([1]);
const Sample = () => {
<div>
hello
<button onClick={async () => {
tempX.push(1);
console.log(tempX)
await setX(tempX)
}}>
x
</button>
{x.map( function(z) {return z})}
</div>
}
export default Sample;
最佳答案
如果最后一个setState具有相同的值,则useState不会重新渲染。
您正在更改数组,这就是为什么不进行重新渲染的原因。
setState不会返回promise,因此您不需要异步和等待。
创建新副本,然后使用传播运算符调用setX。
import React, {useState} from "react";
const [x, setX] = useState([1]);
const Sample = () => {
<div>
hello
<button onClick={() => {
const updated = [...tempX, 1]; // create new copy of your array;
console.log(updated)
setX(updated)
}}>
x
</button>
{x.map( function(z) {return z})}
</div>
}
export default Sample;