【发布时间】:2021-03-15 00:40:04
【问题描述】:
我在我的 React/Redux 应用程序中遇到了可重用性难题。我编写了可重用的 React 组件,例如下拉菜单和滑块,并将状态值存储在我的 Redux Store 中。现在我明白了,只要组件的任何 JSX 实例更改状态,该组件的所有其他实例也会更改状态。他们都开始互相模仿,而我需要他们独立运作。我还想在组件的不同实例中以不同的方式初始化状态,但想不出办法来做到这一点。例如,对于一个滑块,我希望滑块范围的开始值和结束值在组件的不同实例中是不同的。通过 React 的普通 props 系统很容易做到这一点,但我对如何通过 Redux 做到这一点感到困惑。
我对此进行了一些研究,似乎解决方案是为 Redux 存储中组件的每个实例添加唯一 ID。但我需要详细说明在哪里添加 ID(reducer?动作创建者?组件?)以及如何让所有内容流动,以便正确的组件改变其状态。
这是我的减速器:
const INITIAL_STATE = {
slots: 100,
step: 5,
start: 35,
end: 55,
};
const sliderReducer = (state=INITIAL_STATE, action ) => {
switch (action.type) {
case "MIN_SELECTED":
console.log("Min Selected");
return {
...state,
start: action.payload
};
case "MAX_SELECTED":
console.log("Max Selected");
return {
...state,
end: action.payload
};
default:
return state;
}
}
export default sliderReducer;
这是我的动作创建者:
//Slider Minimum Value Selection Action Creator
export const selectMinValue = (value) => {
return (dispatch) => {
dispatch({
type: "MIN_SELECTED",
payload: value
});
};
};
//Slider Maximum Value Selection Action Creator
export const selectMaxValue = (value) => {
return (dispatch) => {
dispatch({
type: "MAX_SELECTED",
payload: value
});
};
};
组件代码太长无法粘贴,但它本质上是 onDrag 事件的事件处理程序和滑块的 JSX。
【问题讨论】:
-
为什么不使用内部状态?您的组件是基于功能的还是基于类的?无论哪种方式,我都会完全避免使用 REDUX 来维护状态....
-
我的应用程序在 Redux 中,所以我试图保留一个单一的状态存储,这是最佳实践。肯定有办法用 Redux 编写可重用的组件。否则为什么会有人使用它。我的组件既是类又是函数,具体取决于。
标签: reactjs redux state reusability code-reuse