gpt4 book ai didi

reactjs - Redux reducers,我可以通过一个 Action 更改几个变量吗(也就是实现单选按钮的逻辑)?

转载 作者:行者123 更新时间:2023-12-05 01:39:58 24 4
gpt4 key购买 nike

我是 redux 和 React 的新手,我在 Dan Abrahamov 的帖子 ( https://stackoverflow.com/a/35675304/8643584 ) 中读到 reducer 应该是纯粹的并且影响尽可能小,我想实现单选按钮类的逻辑,在我看来它在 reducer 中实现这种逻辑是合乎逻辑的,是否可以接受?

我现在实现的逻辑是,在一个 reducer 操作中更改 3 个变量的状态,我能想到的另一种方式是让 reducer 一次更改 1 个值,然后订阅更改,然后在订阅调用中其他 2 个 reducer 相应地更改它们的值。

我目前的逻辑:

const initialState = {
toggleCreate: false
toggleUpdate: false,
toggleDelete: false,
};
const reductionReducer = (state = initialState, action) =>{
switch (action.type) {
case "CRUDBAR_CREATE":
return {
toggleCreate: !state.toggleCreate,
toggleUpdate: false,
toggleDelete: false,
};
case "CRUDBAR_UPDATE":
return {
toggleCreate: false,
toggleUpdate: !state.toggleUpdate,
toggleDelete: false,
};
case "CRUDBAR_DELETE":
return {
toggleCreate: false,
toggleUpdate: false,
toggleDelete: !state.toggleDelete,
};
default:
return state;
}
};
export default categoryReducer;

另一种方式,我怀疑这可能是可以接受的方式:

const initialState = {
toggleCreate: false
toggleUpdate: false,
toggleDelete: false,
};
const reductionReducer = (state = initialState, action) =>{
switch (action.type) {
case "CRUDBAR_CREATE":
return {
toggleCreate: !state.toggleCreate,
toggleUpdate: state.toggleUpdate,
toggleDelete: state.toggleDelete,
};
case "CRUDBAR_UPDATE":
return {
toggleCreate: state.toggleCreate,
toggleUpdate: !state.toggleUpdate,
toggleDelete: state.toggleDelete,
};
case "CRUDBAR_DELETE":
return {
toggleCreate: state.toggleCreate,
toggleUpdate: state.toggleUpdate,
toggleDelete: !state.toggleDelete,
};
default:
return state;
}
};
export default categoryReducer;

我希望其他开发者能够为我的应用做出贡献而不会陷入困境,他们从未想过会这样。所以我请更有经验的开发人员提供见解,谢谢。

最佳答案

是的,这是 Redux 的一个完全合法的用例。您绝对可以通过一个操作更改多个变量。我什至认为这是使用 Redux 的最强点之一。因为 Redux 允许您以一种清晰的方式将一个用户操作分组到它对您的应用程序产生的多种影响。

关于reactjs - Redux reducers,我可以通过一个 Action 更改几个变量吗(也就是实现单选按钮的逻辑)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57387634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com