如何使用 setState 和 React 更改数组中对象的值
how to change value of object in array using setState with React
大家好,晚上好,
我在状态中设置了对象数组,我想更改数组中的一些对象。
这是我的数组,你可以看到:
const [CategoriesArr, setCategoriesArr] = useState([
{
image: anime,
nameByCategories: "Aninate",
allCard: [
silverCard, blackCard
],
},
{
image: vacation,
nameByCategories: "Vacation",
allCard: [
blackCard, silverCard
],
},])
我试图将 allCard
更改为:allCard:blackCard, blackCard
用这种方式:
setCategoriesArr([
{
...CategoriesArr[0],
allCard: [
silverCard, silverCard
]
}])
问题出在 setState 之后,我得到了包含我想要的更改的新数组以及最后一个数组,所以它的意思是这样
{
image: anime,
nameByCategories: "Aninate",
allCard: [
blackCard, blackCard
],
},
{
image: vacation,
nameByCategories: "Aninate",
allCard: [
silverCard, blackCard
],
},
{
image: anime,
nameByCategories: "vacations",
allCard: [
blackCard, silverCard
],
},
我想了解我能否得到完全像这样的新数组:
const [CategoriesArr, setCategoriesArr] = useState([
{
image: anime,
nameByCategories: "Aninate",
allCard: [
silverCard, blackCard
],
},
{
image: vacation,
nameByCategories: "Vacation",
allCard: [
blackCard, blackCard
],
},])
请。
我希望你们能帮助我:)
有一个简单的方法。
const updateCategoryList = (id) => {
const newCategories = CategoriesArr.map(cate => {
if (cate.nameByCategories === id) { // <= id can be "Aninate" or anything you want
cate.allCard[silverCard, silverCard]
return cate;
}
})
setCategoriesArr(newCategories)
}
您可以将此 updateCategory 函数与事件处理程序或所需的其他函数或组件一起使用。
希望你能找到解决办法!
问题是 setter 方法(来自 useState
钩子)不像 class 组件中的 setState
那样将更改合并到现有状态。
通过使用 setter 的回调函数,您可以 previousState
将新更改合并到 return(在您的情况下,更改只是 属性该州的第一项)。
这个也行。
setCategoriesArr((prevValue) => {
return prevValue.map((item, itemIndex) => {
if (itemIndex === 0) {
return { ...item, allCard: ["silverCard", "silverCard"] };
} else {
return item;
}
});
});
代码沙箱 => https://codesandbox.io/s/runtime-shadow-2bbxh?file=/src/App.js
大家好,晚上好,
我在状态中设置了对象数组,我想更改数组中的一些对象。
这是我的数组,你可以看到:
const [CategoriesArr, setCategoriesArr] = useState([
{
image: anime,
nameByCategories: "Aninate",
allCard: [
silverCard, blackCard
],
},
{
image: vacation,
nameByCategories: "Vacation",
allCard: [
blackCard, silverCard
],
},])
我试图将 allCard
更改为:allCard:blackCard, blackCard
用这种方式:
setCategoriesArr([
{
...CategoriesArr[0],
allCard: [
silverCard, silverCard
]
}])
问题出在 setState 之后,我得到了包含我想要的更改的新数组以及最后一个数组,所以它的意思是这样
{
image: anime,
nameByCategories: "Aninate",
allCard: [
blackCard, blackCard
],
},
{
image: vacation,
nameByCategories: "Aninate",
allCard: [
silverCard, blackCard
],
},
{
image: anime,
nameByCategories: "vacations",
allCard: [
blackCard, silverCard
],
},
我想了解我能否得到完全像这样的新数组:
const [CategoriesArr, setCategoriesArr] = useState([
{
image: anime,
nameByCategories: "Aninate",
allCard: [
silverCard, blackCard
],
},
{
image: vacation,
nameByCategories: "Vacation",
allCard: [
blackCard, blackCard
],
},])
请。
我希望你们能帮助我:)
有一个简单的方法。
const updateCategoryList = (id) => {
const newCategories = CategoriesArr.map(cate => {
if (cate.nameByCategories === id) { // <= id can be "Aninate" or anything you want
cate.allCard[silverCard, silverCard]
return cate;
}
})
setCategoriesArr(newCategories)
}
您可以将此 updateCategory 函数与事件处理程序或所需的其他函数或组件一起使用。
希望你能找到解决办法!
问题是 setter 方法(来自 useState
钩子)不像 class 组件中的 setState
那样将更改合并到现有状态。
通过使用 setter 的回调函数,您可以 previousState
将新更改合并到 return(在您的情况下,更改只是 属性该州的第一项)。
这个也行。
setCategoriesArr((prevValue) => {
return prevValue.map((item, itemIndex) => {
if (itemIndex === 0) {
return { ...item, allCard: ["silverCard", "silverCard"] };
} else {
return item;
}
});
});
代码沙箱 => https://codesandbox.io/s/runtime-shadow-2bbxh?file=/src/App.js