【发布时间】:2021-01-16 22:08:00
【问题描述】:
我一直在寻找一种在使用 React 上下文时减少样板的方法。通常,在调度操作时,我会这样做:
applicationDispatch({
type: applicationActionTypes.setIsLoading,
payload: !isLoading,
});
所以我尝试了这个(在 和 组件内部):
const useDispatch = (dispatch, method, payload) =>
dispatch({
type: applicationActionTypes[method],
payload: payload,
});
并试图这样称呼它:
function App(){
const {application, applicationDispatch} = React.useContext(ApplicationStore)
const {isLoading} = application
const toggleLoading = ()=>useDipatch(applicationDispatch, applicationActionTypes.setIsLoading, payload)
...
}
那当然没有用。我收到以下错误:
React Hook "useDispatch" 在函数 "toggleLoading" 中被调用,该函数既不是 React 函数组件也不是自定义 React Hook 函数 react-hooks/rules-of-hooks
所以我尝试在组件中调用它:
return (
<div>
{someBool && <Modal
onClick={useDispatch(applicationDispatch, setIsLoading, !isLoading)}>
...
</Modal>}
</div>
}
我收到以下错误:
有条件地调用 React Hook "useDispatch"。在每个组件渲染 react-hooks/rules-of-hooks 中,必须以完全相同的顺序调用 React Hooks
有什么想法吗?
【问题讨论】:
标签: reactjs react-hooks react-context