【问题标题】:Using actions on React without a Dispatch function is correct?在没有 Dispatch 函数的情况下在 React 上使用操作是否正确?
【发布时间】:2021-07-19 01:59:46
【问题描述】:

我正在 React 上实现 Redux,它目前正在运行,但我不确定它是否正确。我有一个包含 3 个文件的 redux 文件夹:actions、reducers 和 store。

Actions 有这个代码:

export const SETTER_USER = "SETTER_USER"

export const setterUserAction = ({ email, username, role, lastVideo }) => ({
  type: SETTER_USER,
  payload: { email, username, role, lastVideo }
})

我从组件调用这个动作,这是组件上的代码:

import React, { useState, useEffect } from "react";
import { connect } from 'react-redux'
import { setterUserAction } from '../../redux/actions'
...

const Login = ({ navigation, user, setUser }) => {
...
}

const mapStateToProps = state => ({
  user: state.user
})

const mapDispatchToProps = ({
  setUser: setterUserAction
})

export default connect(mapStateToProps, mapDispatchToProps)(Login)

我曾经在组件内部有action,我可以想象这并不理想。所以我把它移到了一个 actions.js 文件中。但是现在我没有使用 dispatch 函数,这感觉很奇怪,因为 dispatch 是整个模式的一部分。所以你怎么看?这是否正确实施?还是只是靠运气?

【问题讨论】:

  • mapDispatchToProps 是一个对象吗?我看到你在定义它时有()
  • @Viet 你说得对, ( ) 与那里无关。

标签: reactjs design-patterns redux components dispatch


【解决方案1】:

您将mapDispatchToProps 定义为一个对象。由react-redux 团队推荐:您可以在此处阅读更多信息:https://react-redux.js.org/using-react-redux/connect-mapdispatch#defining-mapdispatchtoprops-as-an-object

我们建议始终使用 mapDispatchToProps 的“对象速记”形式,除非您有特定的原因来自定义调度行为。

更新:如果你使用带有 Hook 的 Function 组件,你应该使用 React-Redux 钩子 API:https://react-redux.js.org/api/hooks

我们建议使用 React-Redux 钩子 API 作为 React 组件中的默认方法。 现有的连接 API 仍然有效,并将继续受到支持,但钩子 API 更简单,并且与 TypeScript 配合得更好。

但是如果你使用的是类组件。您应该将connectmapDispatchToProps 一起用作对象而不是函数。

【讨论】:

  • @RamaProg 除此之外,还建议在可能的情况下使用 connect 上的钩子,因此您可能需要研究一下:redux.js.org/style-guide/style-guide/… 和一般的现代 redux,如您正在那里编写一种非常古老的 redux 风格,并且可能正在使用过时的资源:@​​987654324@
  • 非常感谢@phry。我相信你是对的,我不是专家,但我似乎记得读过 connect 更好。此外,react-redux 文档使用了 connect。你确定在这种情况下我应该使用钩子 useSelector 和 useDispatch 吗?
  • @Viet 如果我错了,请纠正我。你所说的是,我很幸运地使用了推荐的速记对象,但我并不知道它。所以调度是在后台发生的,我只是没有自己调用它。
  • 差不多,是的! :) 作为链接,我们实际上建议使用 hooks API 作为默认值:react-redux.js.org/api/hooks。我们只是没有时间切换教程中仍然显示 connect 的一些 React-Redux 文档。
猜你喜欢
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
相关资源
最近更新 更多