如何使用 connect w/ Redux 从 this.props 获得简单的调度?

2023-12-31

我有一个简单的 React 组件,可以连接(映射一个简单的数组/状态)。为了避免引用商店的上下文,我想要一种直接从道具获取“调度”的方法。我见过其他人使用这种方法,但由于某种原因无法使用它:)

以下是我当前使用的每个 npm 依赖项的版本

"react": "0.14.3",
"react-redux": "^4.0.0",
"react-router": "1.0.1",
"redux": "^3.0.4",
"redux-thunk": "^1.0.2"

这是带有 connect 方法的组件

class Users extends React.Component {
    render() {
        const { people } = this.props;
        return (
            <div>
                <div>{this.props.children}</div>
                <button onClick={() => { this.props.dispatch({type: ActionTypes.ADD_USER, id: 4}); }}>Add User</button>
            </div>
        );
    }
};

function mapStateToProps(state) {
    return { people: state.people };
}

export default connect(mapStateToProps, {
    fetchUsers
})(Users);

如果您需要查看减速器(没什么令人兴奋的,但就是这样)

const initialState = {
    people: []
};

export default function(state=initialState, action) {
    if (action.type === ActionTypes.ADD_USER) {
        let newPeople = state.people.concat([{id: action.id, name: 'wat'}]);
        return {people: newPeople};
    }
    return state;
};

如果您需要查看我的路由器是如何配置 redux 的

const createStoreWithMiddleware = applyMiddleware(
      thunk
)(createStore);

const store = createStoreWithMiddleware(reducers);

var Route = (
  <Provider store={store}>
    <Router history={createBrowserHistory()}>
      {Routes}
    </Router>
  </Provider>
);

update

看起来如果我在连接中省略我自己的调度(当前上面我显示 fetchUsers),我将获得免费调度(只是不确定这是否是带有异步操作的设置通常的工作方式)。人们会混合搭配还是全有或全无?

[mapDispatchToProps]


默认情况下mapDispatchToProps只是dispatch => ({ dispatch }).
因此,如果您不指定第二个参数connect(), 你会得到dispatch作为组件中的道具注入。

如果您将自定义函数传递给mapDispatchToProps,你可以用这个函数做任何事情。
举几个例子:

// inject onClick
function mapDispatchToProps(dispatch) {
  return {
    onClick: () => dispatch(increment())
  };
}

// inject onClick *and* dispatch
function mapDispatchToProps(dispatch) {
  return {
    dispatch,
    onClick: () => dispatch(increment())
  };
}

为了节省您的打字时间,Redux 提供了bindActionCreators()这可以让你把这个:

// injects onPlusClick, onMinusClick
function mapDispatchToProps(dispatch) {
  return {
    onPlusClick: () => dispatch(increment()),
    onMinusClick: () => dispatch(decrement())
  };
}

进入这个:

import { bindActionCreators } from 'redux';

// injects onPlusClick, onMinusClick
function mapDispatchToProps(dispatch) {
  return bindActionCreators({
    onPlusClick: increment,
    onMinusClick: decrement
  }, dispatch);
}

当道具名称与动作创建者名称匹配时甚至更短:

// injects increment and decrement
function mapDispatchToProps(dispatch) {
  return bindActionCreators({ increment, decrement }, dispatch);
}

如果您愿意,您绝对可以添加dispatch用手在那里:

// injects increment, decrement, and dispatch itself
function mapDispatchToProps(dispatch) {
  return {
    ...bindActionCreators({ increment, decrement }), // es7 spread syntax
    dispatch
  };
}

没有官方建议您是否应该这样做。connect()通常充当 Redux 感知组件和 Redux 不感知组件之间的边界。这就是为什么我们通常会觉得注入没有意义both绑定动作创建者和dispatch。但如果您觉得有必要这样做,请随意。

最后,您现在使用的模式是一个比调用更短的快捷方式bindActionCreators。当你所做的一切就是回归bindActionCreators,您可以省略该调用,而不是这样做:

// injects increment and decrement
function mapDispatchToProps(dispatch) {
  return bindActionCreators({ increment, decrement }, dispatch);
}

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(App);

可以写成这样

export default connect(
  mapStateToProps,
  { increment, decrement } // injects increment and decrement
)(App);

但是,每当您想要更自定义的东西(例如传递dispatch以及。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 connect w/ Redux 从 this.props 获得简单的调度? 的相关文章

随机推荐

  • Javascript:让用户选择像 Firebug 这样的 HTML 元素?

    我想编写一个浏览器 Chrome FF 扩展 需要选择网页上的元素 我希望它的行为像 Firebug 的元素检查器那样 单击检查箭头 然后可以悬停 突出显示元素 当您单击所需的元素时 系统会检查该元素 我只是对允许用户选择元素的代码感兴趣
  • jOOQ:在单个对象中返回带有 join、groupby 和 count 的列表

    核心问题 如何正确地将查询中的信息获取到对象中 Idea我正在 DAO 中创建函数 这可以归结为以下查询 select A count from A left join B on B aId A aId group by A 我正在寻找一种
  • RXTX gnu.io.PortInUseException:&警告:RXTX 版本不匹配

    我正在尝试使用 RXTX API 通过 Java Marine API 从 NMEA 0183 GPS 获取 GPS 数据 运行 Java Marine 提供的 SerialPortExample java 我返回两个错误 也许它们是相关的
  • Unity脚本执行顺序和Start()

    Unity的文档中有这样一行 默认情况下 不同脚本的Awake OnEnable和Update函数按照脚本加载的顺序 任意 被调用 所以我在这里有两个问题 在这种情况下 任意 是什么意思 是随机的吗 这是否还包括 Start 和 Awake
  • 如何在node.js中使用集群?

    我对 Node js 和 Express 非常陌生 我目前正在通过构建自己的服务来学习它 我最近读到了有关集群的内容 我明白了集群的作用 我无法理解的是如何在生产应用程序中使用集群 我能想到的一种方法是使用主进程坐在前面 并以循环方式将传入
  • 通过c++接口导出整个类

    好的 我会重写问题 1 做的够吗 class declspec dllexport CXyz public int Food printf Food n 这样该类就可以在 exe 中像这样使用 include CXyz h CXyz obj
  • Imageview 和 PagerAdapter

    我想将图像放在 ViewPager 的每个页面中 就像一本书 这些图像来自 url 列表 我的适配器看起来像这样 private class MyPagerAdapter extends PagerAdapter Override publ
  • 警告:基类“A”应该在复制构造函数中显式初始化

    我有以下类结构 class A A A const A src class B virtual A B A B const B src A src class C virtual A C A C const C src A src clas
  • 以编程方式访问 Servlet 3.0 中的 MultiPartConfig

    我使用Servlet 3 MultiPartConfig在我的应用程序中实现文件上传的注释 我需要在运行时设置多部分配置位置参数 而不是在注释参数中硬编码 是否有任何 API 可用于以编程方式访问 servlet 的多部分配置 Thanks
  • ASP.NET WebAPI - 如何使用 $.getJSON 传递对象

    我有一个 ASP NET WebAPI 控件如下 public SomeObject GetBenchMarkData Comment comment do stuff 在客户端 我正在尝试以下操作 var comment ID 0 Tex
  • 如何在OpenCV中用随机颜色绘制圆圈

    我正在使用 SURF 算法与 OpenCV 匹配两个图像 我已经掌握了关键点 现在我想用随机颜色的圆圈绘制这些关键点 我知道如何用函数 cvCircle 在 OpenCV 中画一个圆 但颜色是固定的cvScalar r g b 我希望图像中
  • 为什么 Ember.onerror() 没有捕获断言失败错误。?

    我的代码中有一种情况 我需要跟踪生产中的错误 I used ember js作为我的框架 为了跟踪我使用的生产中发生的错误Ember Onerror它只为我提供任何功能错误跟踪 Ember onerror function error Em
  • 如何让 Python 说话

    我怎样才能让 Python 说出一些文本 我可以将 Festival 与子进程一起使用 但我无法控制它 或者可能在交互模式下 但它不会是干净的 有Python TTS 库吗 比如 Festival eSpeak 的 API 您应该尝试使用
  • Jenkins+Github:我们无法交付此有效负载:无法连接到服务器

    我正在尝试在 GitHub 上配置 Web 挂钩 以便它可以将 POST 发送到http 127 0 0 1 8080 github webhook http 127 0 0 1 8080 github webhook 我的詹金斯正在运行h
  • 使用 FormData 和 multer 上传文件

    我已成功使用以下命令将文件上传到节点服务器multer通过使用输入文件对话框选择文件然后提交表单来模块 但现在我需要创建一个FormData对象 并使用发送文件XMLHttpRequest 但它不起作用 文件总是undefined在服务器端
  • kubespray 仪表板警告禁止弹出窗口

    我正在尝试使用 kubespray 在一台机器上设置一个新的 kubernetes 集群 提交 7e84de2ae116f624b570eadc28022e924bd273bc 运行剧本后 在新的 ubuntu 16 04 上 我打开仪表板
  • knockout.js 真的采用了 MVVM 模式吗?

    我是 knockout js 的新手 不久前我读到了 ko 的标题特征 我不明白ko真的是MVVVM吗 因为他们谈论的只是数据绑定及其易用性 但我确信 MVVM 不仅仅是数据绑定 不是吗 是的 knockout js 确实应用了 MVVM
  • 如何使用 sqlalchemy 在 Docker 中访问 postgresql?

    我正在尝试使用 SQLAlchemy 与 dockerized PostgreSQL 服务器交互 就像是 engine create engine postgresql user user password localhost 5432 d
  • 如何在RTL中使用时钟门控?

    我正在对一些时钟进行门控latch以及我设计中的逻辑 我在综合和布局布线方面没有太多经验 在 RTL 中实现时钟门控的正确方法是什么 示例1 always comb begin gated clk clk latch update en e
  • 如何使用 connect w/ Redux 从 this.props 获得简单的调度?

    我有一个简单的 React 组件 可以连接 映射一个简单的数组 状态 为了避免引用商店的上下文 我想要一种直接从道具获取 调度 的方法 我见过其他人使用这种方法 但由于某种原因无法使用它 以下是我当前使用的每个 npm 依赖项的版本 rea