【发布时间】:2020-06-25 06:38:44
【问题描述】:
我有以下代码(使用 React 钩子):
const { state, dispatch } = useContext(Store);
const [branch, setBranch] = useState<TaskingBranchState | null>(null);
const handleBranchChange = (event: ChangeEvent<{}>, newValue: TaskingBranchState | null) => {
setBranch(newValue);
setBranchMembers([]);
}
const [branchMembers, setBranchMembers] = useState([]);
const handleBranchMembersChange = (event: ChangeEvent<{}>, newValue: any) => {
setBranchMembers(newValue);
}
在代码后面的某个地方,我正在执行useQuery 来获取branchMembers,它被分派到我的全局state。如果重要的话,它看起来像这样:
useQuery(GET_BRANCH_MEMBERS(["id", "name"]), {
variables: {
branchId: branch?.branchId
},
onCompleted: (data) => {
if (data !== undefined && data.getBranchMembers !== undefined && data.getBranchMembers !== state.branchMembers) {
dispatch({
type: 'DISPATCH_TYPE',
payload: {
branchMembers: data.getBranchMembers
}
});
}
}
});
其中dispatch 将payload 写入全局state(与上述useContext 中的state 相同)。
我的问题是:
- 我应该使用
state.branchMembers(useQuery调度到的全局值)还是直接调用setBranchMembers并使用上面定义的本地branchMembers状态? - 有什么区别?
- 在这两种情况下,我是否不再需要定义全局状态(如果对 Q1 回答否)或不再需要在本地使用
useState定义任何内容(如果对 Q1 回答是)?
一直在弄乱我的代码,才意识到我有这种困惑。不太熟悉 React hooks tbh,所以如果是基础问题,也请帮忙。
谢谢!
【问题讨论】:
标签: reactjs react-hooks react-state-management react-state