繁体   English   中英

React 状态不会重新渲染

[英]React state does not re-render

请帮忙,我想问一下为什么反应状态不重新渲染。

控制台显示更新的状态,但不在渲染中。

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

 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,因此您不需要 async 和 await。

创建新副本,然后使用扩展运算符调用 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;

UseEffect - 在第二个参数时重新渲染(在这种情况下 [x] 改变)

我不相信这是你需要的:

import React, { useState, useEffect } from "react";


    const Sample = () => {

        const [x, setX] = useState([1]);
        const onClick = (push) => { setX([...x, push]); }

        const itemsToPush = [5, 2, 3, 4]

        useEffect(() => {
            console.log("X changed")
        }, [x])

        return (
            <div>
                hello
            <button onClick={() => onClick(itemsToPush)}>
                    {x}
                </button>
            </div >
        )
    }

    export default Sample;

嘿,有没有人知道如何在onClick函数中按顺序添加数组元素(itemsToPush)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM