如何在 ReactJS 的 setState 调用期间有条件地从 javascript 对象中删除值?
How to conditionally remove a value from a javascript object during a setState call in ReactJS?
updateDishDetails(id, quantity) {
if (quantity !== 0) {
this.setState(
prevState => ({
bookingFormData: {
...prevState.bookingFormData,
dishDetails: {
...prevState.bookingFormData.dishDetails, // WORKING
[id]: quantity, // PERFECTLY
},
},
})
);
}
if (quantity === 0) {
this.setState(
prevState => ({
bookingFormData: {
...prevState.bookingFormData,
dishDetails: {
// ...prevState.bookingFormData.dishDetails, // NEED HELP HERE
// [id]: quantity, // AND HERE
},
},
})
);
}
}
我有上面的功能,我根据数量的值设置 dishDetails 的状态。
我想达到什么目的?
- 当数量!== 0 设置dishDetails状态如图。 (这很完美)
- 当数量 === 0 时,我想从 dishDetails 中删除那个特定的 id,但应该保持之前的状态。 (我需要帮助解决这个问题)
相关状态如下:
this.state = {
bookingFormData: {
dishDetails: []
}
}
能把id作废吗?
将 id 的值设置为 null 以删除内容。
dishDetails: {
...prevState.bookingFormData.dishDetails,
[id]: null,
},
如果它是一个数组就更简单了
dishDetails: {
...prevState.bookingFormData.dishDetails.filter((item) => item.id !== id),
},
或者如果输入和输出都是对象
dishDetails: {
...Object.entries(prevState.bookingFormData.dishDetails)
.filter(([key, item]) => item.id !== id)
.reduce((acc, [key, item]) => ({...acc, [key]: item}), {}),
},
我将使用 delete operator:
if (quantity === 0) {
const dishDetails = {...this.state.bookingFormData.dishDetails}
delete dishDetails[id];
this.setState(
prevState => ({
bookingFormData: {
...prevState.bookingFormData,
dishDetails
}
})
)
}
您可以使用解构赋值和 rest 运算符来创建新对象并删除 prop :
if (quantity === 0) {
this.setState(
prevState => {
const { [id]: removedId, ...newDishDetails } = prevState.bookingFormData.dishDetails;
return {
bookingFormData: {
...prevState.bookingFormData,
dishDetails: newDishDetails,
},
},
}
);
}
updateDishDetails(id, quantity) {
if (quantity !== 0) {
this.setState(
prevState => ({
bookingFormData: {
...prevState.bookingFormData,
dishDetails: {
...prevState.bookingFormData.dishDetails, // WORKING
[id]: quantity, // PERFECTLY
},
},
})
);
}
if (quantity === 0) {
this.setState(
prevState => ({
bookingFormData: {
...prevState.bookingFormData,
dishDetails: {
// ...prevState.bookingFormData.dishDetails, // NEED HELP HERE
// [id]: quantity, // AND HERE
},
},
})
);
}
}
我有上面的功能,我根据数量的值设置 dishDetails 的状态。
我想达到什么目的?
- 当数量!== 0 设置dishDetails状态如图。 (这很完美)
- 当数量 === 0 时,我想从 dishDetails 中删除那个特定的 id,但应该保持之前的状态。 (我需要帮助解决这个问题)
相关状态如下:
this.state = {
bookingFormData: {
dishDetails: []
}
}
能把id作废吗?
将 id 的值设置为 null 以删除内容。
dishDetails: {
...prevState.bookingFormData.dishDetails,
[id]: null,
},
如果它是一个数组就更简单了
dishDetails: {
...prevState.bookingFormData.dishDetails.filter((item) => item.id !== id),
},
或者如果输入和输出都是对象
dishDetails: {
...Object.entries(prevState.bookingFormData.dishDetails)
.filter(([key, item]) => item.id !== id)
.reduce((acc, [key, item]) => ({...acc, [key]: item}), {}),
},
我将使用 delete operator:
if (quantity === 0) {
const dishDetails = {...this.state.bookingFormData.dishDetails}
delete dishDetails[id];
this.setState(
prevState => ({
bookingFormData: {
...prevState.bookingFormData,
dishDetails
}
})
)
}
您可以使用解构赋值和 rest 运算符来创建新对象并删除 prop :
if (quantity === 0) {
this.setState(
prevState => {
const { [id]: removedId, ...newDishDetails } = prevState.bookingFormData.dishDetails;
return {
bookingFormData: {
...prevState.bookingFormData,
dishDetails: newDishDetails,
},
},
}
);
}