gpt4 book ai didi

reactjs - React-redux 中 Action 和 Action 类型的含义是什么?

转载 作者:行者123 更新时间:2023-12-04 10:06:34 25 4
gpt4 key购买 nike

现在,如果我想更改商店中的值(value),我应该执行以下步骤:

  • 转到constants/actionTypes 文件,创建一行操作类型
  • 转到 Action 并创建 Action 函数
  • 在我使用它的每个组件中,我应该为 mapDispatchToProps
  • 创建一个函数
  • 在reducer中我应该写一个改变的逻辑

  • 如此复杂的意义何在?
    如果我只做一个包含改变状态的 Action 的文件,会不会是错误的?例如:

    // Action .js
    export const setCategories = (payload, setState, currentState) => setState({ categories: payload })
    export const addCategory = (payload, setState, currentState) => setState({ categories: [...currentState.category, payload] })

    为了使它工作,我可以为所有项目创建几个通用函数

    1) getActions ,它自动收集所有来自 actions.js 的导出并将它们提供给 mapDispatchToProps,所以我们可以在所有组件中编写
    const mapDispatchToProps = getActions

    它的代码可以是这样的

    //actionsDispatcher.js
    import * as actions from 'actions'
    const getActions = (dispatch, ownProps) => {
    Object.keys(actions).forEach(actionName => {
    const fn = actions[actionName]
    actions[actionName] = payload => dispatch({ action: fn, payload, type: _.toSnakeCase(actionName) })
    }
    return actions
    }

    这意味着我们从 actions.js 传递给 dispatch action 函数

    2) 设置状态 这将类似于 react 功能,但对于 redux 状态

    然后在reducer函数中我们恰到好处
    function rootReducer(state = initialState, action) {
    if (action.action) {
    action.action(action.payload, setState, state)
    }

    // here we make it extandable for ordinary way if required
    if (action.type === '...') {
    // ...
    }

    }

    没有别的...

    所以问题是这种方法有什么问题,编码人员只需要在一个文件“actions.js”中编写一个函数,然后从任何组件调用它作为 props.someActionName(someParams) 而不是更改 4 个不同的文件?

    谢谢

    最佳答案

    Redux 应该让复杂的需求更容易实现,但如果你有简单的需求,那么它会使实现这些需求变得更加复杂。

    motivation提及 CQRS (命令查询职责分离)将您从存储中读取的方式(在带有选择器的 redux 中,我是重新选择的忠实粉丝)与您写入它的方式(使用 Action 和 reducer )分开。

    Action 和 reducer 是 CQRS 的命令(写入)部分,是 event sourcing ,redux 有时被称为事件存储。这使您能够为您的事件( Action )添加或删除处理程序(reducer 或中间件),这些处理程序可以更新存储、调度其他事件(= Action )、执行异步操作、写入本地存储。

    如果您需要在一个函数中完成所有这些事情(异步获取、写入本地存储、调用其他函数(调度其他操作)等),那么该函数将变得无法管理。

    即使函数只调用其他函数,它仍然需要知道某个 Action 的整个过程。但是,如果(例如)您有一个本地存储中间件,可以在某些操作上写入存储,那么其他代码不需要知道如何或何时调用它。所以当写入本地存储的逻辑发生变化时,它仅限于本地存储中间件。

    这就是处理程序(reducers、中间件)监听事件( Action )的好处,处理程序只需要知道进程的一小部分,而不是整个进程。

    有了事件资源,我们也知道为什么状态有一定的值(value),而不是只知道状态是什么,article状态:

    However there are times when we don't just want to see where we are, we also want to know how we got there.



    事件存储的另一大优势是您可以通过回放事件来重新创建数据。所有这些都是使用 redux def 工具出色完成的。

    Here是一本关于 React 和 Redux 的好书。

    关于reactjs - React-redux 中 Action 和 Action 类型的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61556343/

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