React useState - 如何用数组设置对象?
React useState -how to set object with arrays?
我似乎无法更新包含数组的对象。我研究过,但仍然不知道。谢谢。
状态结构:
items = {
names: [],
cities: []
}
const [items, setItems] = useState({});
const update = (categoryName, element) => setItems(...items, [categoryName]: element)
update("names", "mike")
这只是替换数组中的元素,但不会添加到它们中
你会想要使用回调函数并获取最后的状态,就像这样
const update = (categoryName, element) =>
setItems((oldItems) => ({
...oldItems,
[categoryName]: [...(oldItems[categoryName] || []), element]
}));
完整示例
import { useEffect, useState } from "react";
export default function App() {
const [items, setItems] = useState({ names: [] });
const update = (categoryName, element) =>
setItems((oldItems) => ({
...oldItems,
[categoryName]: [...(oldItems[categoryName] || []), element]
}));
// example to call `update`
useEffect(() => {
update("test", "blub");
}, []);
return (
<div className="App">
{items.test?.map((item) => (
<p>{item}</p>
))}
</div>
);
}
我似乎无法更新包含数组的对象。我研究过,但仍然不知道。谢谢。
状态结构:
items = {
names: [],
cities: []
}
const [items, setItems] = useState({});
const update = (categoryName, element) => setItems(...items, [categoryName]: element)
update("names", "mike")
这只是替换数组中的元素,但不会添加到它们中
你会想要使用回调函数并获取最后的状态,就像这样
const update = (categoryName, element) =>
setItems((oldItems) => ({
...oldItems,
[categoryName]: [...(oldItems[categoryName] || []), element]
}));
完整示例
import { useEffect, useState } from "react";
export default function App() {
const [items, setItems] = useState({ names: [] });
const update = (categoryName, element) =>
setItems((oldItems) => ({
...oldItems,
[categoryName]: [...(oldItems[categoryName] || []), element]
}));
// example to call `update`
useEffect(() => {
update("test", "blub");
}, []);
return (
<div className="App">
{items.test?.map((item) => (
<p>{item}</p>
))}
</div>
);
}