我有一个带有数据输入的图表和用户界面。我使用 redux 来存储图表数据。我有2棵树。一 - 用于图表组件。它包含数字数组(轴坐标)。第二个是ui。它包含对象数组:{轴坐标,可见性}。
这种结构基于在图表中显示/隐藏某些数据的能力。
Redux 商店
const initialState = {
chartSettings: {
...
axisValues: [7, 9, 1, 13, 24, ...]
},
chartSettingsData: {
...
axisValues: [
{value: 7, visibility: true},
{value: 9, visibility: false},
...
]
}
};
我希望我的图表组件从存储中获取清晰的数据数组,而不需要可见性逻辑。但我需要它用于ui。所以我来到了这个结构。可能是错的。但我没有其他想法。
因此,当我单击复选框时,我会更改存储对象 chartSettingsData 中的可见性。然后,我需要用图表的数据更新另一棵树。在 reducer 中更新 chartSettingsData 后,我尝试克隆过滤数组。
case "UPDATE_ITEM_VISIBILITY":
return {
...state,
chartSettingsData: {
...state.chartSettingsData,
axisValues: state.chartSettingsData.axisValues.map((item, i) =>
i === index
? { value: item.value, visibility: !item.visibility }
: item
),
},
chartSettings: {
...state.chartSettings,
axisValues: (() => {
const filtered = state.chartSettingsData.axisValues.filter(
(item) => item.visibility
);
return filtered.map((item, i) => item.value);
})(),
}
但是我在 chartSettingsData 更新之前在 chartSettings 中获取数据。在这种情况下,更新 redux 存储的正确方法是什么?