我正在尝试将对象更新为嵌套数组,当我尝试使用 React Hooks 时,下面的代码运行良好,使用 useState 来更新状态。
然后我尝试添加一个名为 Recoil 的状态管理库,这是一个来自 Facebook 的新库,它超级简单,行为类似于 Hooks。
但是在我更改了代码添加了一些 Recoil 代码后,比如 atom,useRecoilState,向嵌套数组添加一个新对象就停止了工作。
我尝试了几种不同的方法来解决这个问题并找到其他解决方案,但效果不佳。
有谁知道如何解决这个问题?您可以检查下面的代码和代码框链接。
https://codesandbox.io/s/nested-arrays-qrw95?file=/src/App.js:0-1547
import React from "react";
import { RecoilRoot, atom, useRecoilState } from "recoil";
const todoListState = atom({
key: "TodoList",
default: [
{
name: "Lee",
device: [
{ name: "MBPR", price: 3000 },
{ name: "MBA", price: 2000 }
]
}
]
});
export function TodoApp() {
const [list, setList] = useRecoilState(todoListState);
return (
<>
{list.map((x, i) => {
return (
<div style={{ border: "1px solid black", textAlign: "left" }} key={i}>
<div>{x.name}</div>
<div>Devices</div>
<ul>
{x.device.map((y, j) => {
return (
<>
<li key={j}>{y.name}</li>
</>
);
})}
</ul>
<button
onClick={() => {
const clone = [...list];
clone[i].device = [...clone[i].device, { name: "IPX" }];
setList(clone);
}}
>
Add List
</button>
</div>
);
})}
<button
onClick={() => {
const newData = { name: "Kristoffer", device: [{ name: "Nokia" }] };
setList([...list, newData]);
}}
>
Add Item
</button>
</>
);
}
export default function App() {
return (
<RecoilRoot>
<div className="App">
<TodoApp />
</div>
</RecoilRoot>
);
}