我只是想确定一下。 我在solidjs中有这家商店:
type StoreState = {
selectionByCondition: Array<{
condition: BogoCondition;
cardState: Array<{
handle: string;
variant: string;
}>;
}>;
selectionByReward: Array<{
reward: BogoReward;
cardState: Array<{
handle: string;
variant: string;
checked: boolean;
}>;
}>;
};
我是这样设置的
setState(
"selectionByReward",
widgetData()?.discountData.rewards.map((reward) => {
console.log({ sortedConditions: sortedConditions() });
if (reward.condition === "SAME_SELECTION") {
if ("match" in reward) {
return {
cardState: state.selectionByCondition[0].cardState.map((v) => ({
...v,
checked: true,
})),
reward,
};
} else if (
"combination" in reward &&
reward.combination === "DIFFERENT_PRODUCTS"
) {
return {
cardState: getCondition(0)
.products.slice(0, reward.quantity)
.map((p) => ({
handle: p.handle,
variant: p.variants[0],
checked: true,
})),
reward,
};
} else {
return {
cardState: new Array(reward.quantity).fill({
handle: getCondition(0).products[0].handle,
variant: getCondition(0).products[0].variants[0],
checked: true,
}),
reward,
};
}
} else {
if (
"combination" in reward &&
reward.combination === "DIFFERENT_PRODUCTS"
) {
return {
cardState: reward.products.slice(0, reward.quantity).map((p) => ({
handle: p.handle,
variant: p.variants[0],
checked: true,
})),
reward,
};
} else {
return {
cardState: new Array(reward.quantity).map(() => ({
handle: reward.products[0].handle,
variant: reward.products[0].variants[0],
checked: true,
})),
reward,
};
}
}
}) || []
);
我试图只更新cardState的一个“checked”属性,但我不知道为什么它会改变数组中所有“checked”的“checked”值,即使文档中说“product应该适用”局部突变...我做错了什么?我无法改变整个数组,因为当 cardState.handle 更改时我会触发获取,并且我不想在检查更改时触发重新获取,因为它没有意义。
setState(
"selectionByReward",
rewardIdx,
"cardState",
produce((cardState) => {
cardState[cardIndex].checked = !cardState[cardIndex].checked;
})
);
据我所知,product 用于使用突变构建下一个状态,同时保持原始状态完整,直到提交更改。这意味着一旦声明提交,您将获得一个新对象。但这并不意味着它会随意改变一个对象。
我试图只更新cardState的一个“checked”属性,但我不知道为什么它会改变数组中所有“checked”的“checked”值。
您可能正在更改代码中的多个项目:https://www.solidjs.com/docs/latest#updating-stores
或者,您想要更新数组项,可以使用其索引或范围。