reactjs - React useState hook 如何处理可变对象

标签 reactjs react-hooks

假设我的组件有一个状态,它是一组选定的 ID。 Javascript 有一个 Set类型,所以我试试这个:

let [selectedIDs, setSelectedIDs] = useState(new Set());

Javascript Set本身是可变的,所以我很困惑。
function toggleSelectedID(id) {
    let set = selectedIDs;
    if (set.has(id)) { set.delete(id) }
    else { set.add(id) }
    // ???
    setSelectedIDs(set);
}

如果Set不可变的对象,我会创建一个新的 Set添加或删除元素,并传递新的 SetsetSelectedIDs ,改变当时的状态。

但是随着可变 Set ,如果我们返回 ??? 会发生什么线? React 是否会处于糟糕的状态,因为我“进入”了它的状态并改变了它,而没有正式告诉它 setSelectedIDs ?

最佳答案

在您的示例中,setSelectedIDs不更新应用程序 state .

那是因为你设置了相同的引用,你应该复制一份:

setSelectedIDs(new Set(set));

codesandbox例子。

What would happen if we returned at the ??? line



什么都不会发生,你只是在你的函数中改变了一个变量,你可以随心所欲地进行多次。

当您希望您的 React-App 注意到更改时,您应该调用一个函数来更新状态( setSelectedIDs() )并且您的应用程序将被重新渲染。

引用 Using State Correctly

关于reactjs - React useState hook 如何处理可变对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55820536/

相关文章:

reactjs - forwardRef : Property 'ref' does not exist on type 'IntrinsicAttributes' 的泛型错误

javascript - 使用复选框从数组中添加/删除项目

javascript - 无需重新渲染即可进行路由的 react 方式

reactjs - 如何从自定义 react Hook 返回数据?

reactjs - 我可以在循环内使用 useEffect 确保其尺寸恒定吗?

reactjs - React-Redux 和 React Context API 可以在同一个项目中同时使用吗?

javascript - 如何定义react-testing-library的容器大小?

reactjs - 如何使用React useEffect 窗口removeEventListener

javascript - socket.io 监听器在函数式 React 中触发太多次

javascript - React.createRef 和 React.useRef 之间的区别?