html 使用setState但不执行重新渲染?

y4ekin9u  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(132)

我有这个脚本,attr是哈希对象,以保持应用程序数据.

const [attr,setAttr] = useState()

const onSetAttr = (data) =>{
    console.log(data);
    var new_attr = attr;
    for (let key in new_attr) {
        if (key in data){
            new_attr[key] = data[key];
        }
    }
    setAttr(new_attr);
    console.log(new_attr);
}

这意味着data和attr_应该作为散列标记。
但是,setAttr工作正常,但组件不会重新渲染。
我谷歌了一下,发现这与可变/可变有关。
然而在这种情况下,我如何才能重新渲染强制?

6ovsh4lw

6ovsh4lw1#

您正在修改同一个对象,因此reconciliation无法正常工作。您应该创建一个新对象:

const [attr,setAttr] = useState()

const onSetAttr = (data) =>{
    var new_attr = {...attr}; // <= object destructuring creates a new object
    for (let key in new_attr) {
        if (key in data){
            new_attr[key] = data[key];
        }
    }
    setAttr(new_attr);
    console.log(new_attr);
}

相关问题