Reactjs 我应该使用全局状态还是React hook';那是当地的州吗?
我有以下代码(使用React钩子): 其中Reactjs 我应该使用全局状态还是React hook';那是当地的州吗?,reactjs,react-hooks,react-state-management,react-state,Reactjs,React Hooks,React State Management,React State,我有以下代码(使用React钩子): 其中dispatch将有效载荷写入全局状态(与上面useContext中的状态相同) 我的问题是: 我应该使用state.branchMembers(useQuery分派到的全局值)还是简单地调用setBranchMembers并使用上面定义的本地branchMembers状态 有什么区别 在这两种情况下,我是否不再需要定义全局状态(如果对Q1回答否)或不再需要使用useState本地定义任何内容(如果对Q1回答是) 我一直在乱搞我的代码,只是刚刚意识到我有
dispatch
将有效载荷
写入全局状态
(与上面useContext
中的状态相同)
我的问题是:
我应该使用state.branchMembers
(useQuery
分派到的全局值)还是简单地调用setBranchMembers
并使用上面定义的本地branchMembers
状态
有什么区别
在这两种情况下,我是否不再需要定义全局状态(如果对Q1回答否)或不再需要使用useState
本地定义任何内容(如果对Q1回答是)
我一直在乱搞我的代码,只是刚刚意识到我有这种困惑。不太熟悉tbh,所以如果这是一个基本问题,也请帮助
谢谢大家! 这取决于您是否希望在不同组件之间共享分支成员
由于您已经将分支成员
分派到全局状态,我假设您确实希望共享它。因此,您可以只使用全局状态并删除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;
}
...
}
}
这很有道理,谢谢你!但是,如果我需要为每个组件调用相同的端点,但实例化它们的方式不同(例如,我已将组件A中的state.branchMembers作为数组分派到state.branchMembers中,但当我打开组件B时,我需要将state.branchMembers初始化为空数组),那么在这种情况下,我是否应该使用本地状态?谢谢抱歉,但是另外,如果我的状态依赖于其他状态(例如,branchMembers依赖于branch),那么我是否应该使用本地状态?您是否真的在上下文中存储函数?如果我的状态依赖于某个其他状态如果状态
是共享的并且依赖于某个其他状态
,那么其他状态
也应该与原始状态一起共享并存储在上下文中contextnoted关于状态依赖关系!我要记住,在我的生产代码中,这只是测试我后端功能的东西:)在上下文中存储函数是什么意思?我在我的商店里定义了一堆减速机,如果这就是你的意思,它们将有效载荷的输出映射到状态
const { state, dispatch } = useContext(Store);
...
doSomethingWith(state.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;
}
...
}
}