请帮助,我想问为什么反应状态没有重新渲染。

控制台显示更新的状态,但不显示。

我在相同的场景中有类似的代码,这只是为了简化。


       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;

07-26 01:21