【发布时间】:2020-04-24 22:07:03
【问题描述】:
我在最初的问题中从未明确明确,但我正在尝试在没有 Redux 的情况下完成所有这些操作,这意味着没有 useSelector();
这是一个使用原生 React 来实现选择器的练习。
我正在尝试使用钩子构建类似 Redux 的安排,我是 borrowing heavily from this guy
所以,我们有一个商店:
const CarStore = ({ children }) => {
const [state, dispatch] = useReducer(
carReducer,
[
{
type: 'fast',
mpg: 'bad',
},
],
);
return (
<CarStateContext.Provider value={selectors}>
<CarDispatchContext.Provider value={dispatch}>
{children}
</CarDispatchContext.Provider>
</CarStateContext.Provider>
);
};
export const CarStateContext = createContext();
export const CarDispatchContext = createContext();
现在,dispatch 自动通过carReducer 访问state,这非常好。即时还原!
好吧,反正是半个 Redux。我仍然缺少选择器,这是我的问题。鉴于上述上下文,我怎样才能最好地构建,例如,像getCarType() 这样的选择器,它只会“快速”返回到组件?
一个模糊的想法是这样的:
const CarStore = ({ children }) => {
const [state, dispatch] = useReducer(
carReducer,
[
{
type: 'fast',
mpg: 'bad',
},
],
);
// selectors, kind of.
const selectors = {
getType: () => { return state.type; },
getMpg: () => { return state.mpg; },
};
return (
<CarStateContext.Provider value={selectors}> // <- don't return state, return selectors
<CarDispatchContext.Provider value={dispatch}>
{children}
</CarDispatchContext.Provider>
</CarStateContext.Provider>
);
};
export const CarStateContext = createContext();
export const CarDispatchContext = createContext();
我猜这确实有效,但可能有更好的解决方案?
【问题讨论】:
标签: reactjs react-hooks