我有以下代码(使用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
写到全局state
(与useContext
相同的state.branchMembers
)。
我的问题是:
useQuery
(setBranchMembers
调度到的全局值)还是直接调用branchMembers
并使用上面定义的局部useState
状态?df['avg'] = df.iloc[:, 2:].mean(axis=1)
进行任何定义(如果对Q1回答为是)?曾经迷恋我的代码片刻,才意识到我有这种困惑。对React hooks tbh不太熟悉,因此,如果这是一个基本问题,请也提供帮助。
谢谢!
答案 0 :(得分:1)
这取决于您是否要在不同组件之间共享branchMembers
。
由于您已经将branchMembers
分发到了全局状态,所以我假设您确实想共享它。因此,您只能使用全局状态并删除useState
const { state, dispatch } = useContext(Store);
...
doSomethingWith(state.branchMembers);
...
不需要使用全局状态数据(来自上下文)到本地状态(来自useState
)来使用它。您可以立即使用上下文中的数据。
更新
如果您的branchMembers
依赖于branch
,则只需继续分发branchData
和branchMembers
。只是记得要写在减速器上
dispatch({
type: "WRITE_BRANCH_AND_BRANCH_MEMBERS",
payload: {
branch: branchId, // or branch or branchData whatever needed
branchMembers: data.getBranchMembers,
},
});
// your-reducer.js
function reducer(state, action) {
...
switch (action.type) {
case "WRITE_BRANCH_AND_BRANCH_MEMBERS": {
newState = {
...state,
branch: action.payload.branchId,
branchMembers: action.payload.branchMembers,
}
break;
}
...
}
}