Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用Redux在React组件之间传达UI状态更改?

如何使用Redux在React组件之间传达UI状态更改?
EN

Stack Overflow用户
提问于 2015-11-06 15:28:05
回答 2查看 6.6K关注 0票数 16

据我所知,Redux是关于将UI的所有状态保存在一个存储中(以便能够轻松地重现某些状态,并且没有副作用)。您可以通过触发reducers的触发操作来操纵状态。

我目前正在写一个类似博客的小应用,你可以在其中简单地创建和编辑帖子。我有一个用于创建post的对话框,App组件的render方法大致返回如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div>
    <AppBar ... />
    <PostFormDialog
      addPost={actions.addPost}
      ref="postFormDialog" />
    <PostList
      posts={posts}
      actions={actions} />
</div>

我的问题是:对话框的状态(打开或关闭)是否应该是App组件的状态对象的一部分?因此,打开和关闭对话框应通过操作触发,而不是执行类似以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
onTriggerCreatePostDialog(e) {
    this.refs.postFormDialog.show();
}

其中onTriggerCreatePostDialog是通过在“创建”按钮上的某个点击监听程序来触发的。

对我来说,通过一个动作来做这件事似乎有点奇怪,因为它引入了一种“间接”。

但是,假设我想要重用对话框来执行编辑操作,我必须能够从组件结构中更深层的元素打开对话框,例如,从PostList组件的子级Post组件打开对话框。我可以做的是通过props属性在层次结构中向下传递onTriggerCreatePostDialog函数,但这对我来说似乎很麻烦……

因此,int的目的也是为了在不是直接父子关系中的组件之间进行通信。还有其他选择吗?我应该以某种方式利用全局事件总线吗?我现在还不太确定。

EN

回答 2

Stack Overflow用户

发布于 2015-11-06 16:20:15

在我看来,你走在正确的道路上。文档一开始可能有点棘手,但我可以告诉你我和我的团队是如何使用实现的。

为了解决你的第一个问题;如果状态是特定于组件的,那么我们将该状态保留在组件中。这方面的一个例子是在本地对记录进行分页的面板-其他任何东西都不需要知道该行为。因此,在这种情况下,我们不会在页面更改时触发redux操作,这将在组件结构中使用refs进行内部处理。

我们的redux状态主要由通过xhr请求或从共享状态收集的数据组成。共享状态的一个示例是管理使用该范围显示数据的多个组件之间的时间范围。在本例中,我们将触发redux操作;使用更改后的状态更新日期状态(同时还通过xhr更新一些其他状态项),然后最终返回组件并重新呈现。

尽管如此,通过refs触发操作是完全可以接受的,它只是关于具体的用例。

为了解决您的第二个问题,redux建议使用Smart & Dumb组件概念。所以您是对的,您将向下传递一个函数,以供哑巴组件使用。

我们在connect设置中使用mapDispatchToProps。所以基本上你要传递一个返回函数"dispatchers“的对象的函数。您将能够直接在智能组件的this.props中访问这些函数。

mapDispatchToProps示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function mapDispatchToProps(dispatch) {
  return {
    myAction: () => dispatch(actions.myAction()),
  };
}

所以这在99%的情况下都是有效的,但我遇到过一些使用全局事件总线的情况,所以在尝试尽可能坚持使用Smart / Dumb组件方法时,不要害怕同时使用这两种方法。

顺便说一句,我建议使用reselect将redux状态映射到智能组件。你也可以找到其他很棒的redux资源here (列出了我们使用的一些东西)。

票数 7
EN

Stack Overflow用户

发布于 2015-11-06 16:13:06

对话框的状态应该在redux存储中,由操作触发。是否应该呈现它应该通过检查redux存储中的状态来确定。

App.render()应该是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
render() {
  const { showDialog } = this.props;

  return (
    <div>
      <AppBar ... />
      { showDialog ? <PostFormDialog ... /> : false }
      <PostList ... />
    </div>
  );
}

其中mapStateToProps应该是类似于state => {{ showDialog: state.showDialog }}的东西

就交付操作创建器而言,将其传递到props树可能是正确的方法,除非您有一些好的位置,在那里有另一个智能组件是有意义的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33570141

复制
相关文章
使用Redux和React-redux在React中进行状态管理
首先,我们需要使用create-react-app命令行工具安装新的react应用。
前端修罗场
2022/07/29
2.9K0
使用Redux和React-redux在React中进行状态管理
【React】归纳篇(十)组件间通信方式之Redux | UI组件AntDesign | Redux-react
文档: https://reacttraining.com/react-router/web/guides/philosophy
前端修罗场
2023/10/07
2650
【React】归纳篇(十)组件间通信方式之Redux | UI组件AntDesign | Redux-react
React引入Redux实现组件间共享状态
安装 npm install redux -s 在src目录下新建store文件夹,新增index.js文件 导入redux基本模块 import { createStore } from 'redux'; const store = createStore(); export default store; 再新增reducer.js文件,这里存放共享的变量 const defaultState = { countNum: 0 } export default (state = defaultSta
明知山
2021/06/21
8980
React第三方组件5(状态管理之Redux的使用⑥Redux DevTools)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.3K0
React第三方组件5(状态管理之Redux的使用⑥Redux DevTools)
React进阶(5)-分离容器组件,UI组件(无状态组件)
至今为止,关于React中的组件已经接触到了有很多,用类class声明的组件,函数式funtion关键字声明的组件,以及样式组件(styled-components),对于前面几节当中已经用Redux实现了一个todolist,但是代码依旧不够完美,我们继续进行拆分的
itclanCoder
2020/10/25
1.5K0
React进阶(5)-分离容器组件,UI组件(无状态组件)
至今为止,关于React中的组件已经接触到了有很多,用类class声明的组件,函数式funtion关键字声明的组件,以及样式组件(styled-components),对于前面几节当中已经用Redux实现了一个todolist,但是代码依旧不够完美,我们继续进行拆分的
itclanCoder
2020/10/28
9640
React进阶(5)-分离容器组件,UI组件(无状态组件)
如何在 React 应用中使用 Hooks、Redux 等管理状态
大家好,我是若川。持续组织了近一年的源码共读活动,感兴趣的可以 点此扫码加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。
若川
2022/11/11
8.5K0
如何在 React 应用中使用 Hooks、Redux 等管理状态
React和Redux——状态管理Flux和Redux
在强调组件化的React中,我们需要以高内聚、低耦合的原则设计高可复用性的组件。因此渲染组件的数据由两部分组成,一个是由父组件传入的Props参数、一个是组件的内部状态State。Props参数可以是任何的Javascript对象,作为组件本身可以通过使用propTypes限制必须输入的参数和输入参数的类型以保证组件的可用性。State负责维护组件内部的状态,组件内部必要时可以通过触发父组件传递的回调函数传递信息给父组件或者将State以Props的形式传递给子组件。
lyndonxdlin
2018/07/05
1.9K0
React/ReactNative 状态管理: redux 如何使用
有同学反馈开发 ReactNative 应用时状态管理不是很明白,接下来几篇文章我们来对比下 React 及 ReactNative 状态管理常用的几种框架的使用和优缺点。
张拭心 shixinzhang
2023/03/27
1.4K0
React第三方组件5(状态管理之Redux的使用①简单使用)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.2K0
React第三方组件5(状态管理之Redux的使用①简单使用)
React + Redux 组件化方案
作者:何方舟 在介绍组件化方案之前,先对 react 和 redux 做一个简单介绍。 Why React 理想中的组件化,第一步应该就是组件的标签化, 例如有一个 Header 组件,如下图所示
腾讯IVWEB团队
2017/05/03
1.4K0
React + Redux 组件化方案
理想中的组件化,第一步应该就是组件的标签化, 例如有一个 Header 组件,如下图所示
IMWeb前端团队
2019/12/04
5710
React + Redux 组件化方案
React + Redux 组件化方案 在介绍组件化方案之前,先对 react 和 redux 做一个简单介绍。 Why React 理想中的组件化,第一步应该就是组件的标签化, 例如有一个 Head
IMWeb前端团队
2017/12/29
7800
React + Redux 组件化方案
React技巧1(状态组件与无状态组件的使用)
本教程总共5篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1.React 技巧1(状态组件与无状态组件的使用) ----2018.01.04 2.React 技巧2(避免无意义的父节点)----2018.01.05 3.React 技巧3(如何优雅的渲染一个List)----2018.01.06 4.React 技巧4(如何处理List里面的Item)----2018.01.07 5.React 技巧5(TodoList实现)----2018.01.08 开发环境
前端人人
2018/04/11
1.8K0
React技巧1(状态组件与无状态组件的使用)
React学习笔记(四)—— 组件通信与状态管理、Hooks、Redux、Mobe
2、利用Redux进行状态管理,这种方式的配套工具比较齐全,可以自定义各种中间件;
张果
2023/03/24
4.9K0
React学习笔记(四)—— 组件通信与状态管理、Hooks、Redux、Mobe
React第三方组件5(状态管理之Redux的使用⑤异步操作)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.5K0
React第三方组件5(状态管理之Redux的使用⑤异步操作)
React第三方组件5(状态管理之Redux的使用②TodoList上)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.2K0
React第三方组件5(状态管理之Redux的使用②TodoList上)
React第三方组件5(状态管理之Redux的使用④TodoList下)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.1K0
React第三方组件5(状态管理之Redux的使用④TodoList下)
React第三方组件5(状态管理之Redux的使用③TodoList中)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件5(状态管理之Redux的使用①简单使用)---2018.03.20 2、React第三方组件5(状态管理之Redux的使用②TodoList上)---2018.03.21 3、React第三方组件5(状态管理之Redux的使用③TodoList中)---2018.03.22 4、React第三方组件5(状态管理之Redux的使用④TodoList下)---2018.03.23 5、
前端人人
2018/04/11
1.9K0
React第三方组件5(状态管理之Redux的使用③TodoList中)
React/ReactNative 状态管理: redux-toolkit 如何使用
有同学反馈开发 ReactNative 应用时状态管理不是很明白,接下来几篇文章我们来对比下 React 及 ReactNative 状态管理常用的几种框架的使用和优缺点。
张拭心 shixinzhang
2023/03/27
1.8K0

相似问题

如何重用使用React & Redux更改状态的组件

112

使用Redux更改React组件中的状态

11

在redux状态更改时更新react组件

17

如何使用Redux在组件之间共享状态?

20

隐藏组件更改其状态redux react

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文