当前位置: 首页 > news >正文

对redux的理解

redux文件中:

redux文件中,需要作两件事:
1、由dispatch来的事件找到对应的action。
2、如何将事件中的参数映射到redux的store的state中去。

redux的store有state和actions。


定义actions:
下面将 hideDialog的dispatch 和type为HIDE_DIALOG的Action关联起来。
也就是如果向store dispatch一个hideDialog的消息,
则由store中的HIDE_DIALOG Action 来处理。
则store中type为HIDE_DIALOG
export const actions = {
    hideDialog: dispatch => {
        dispatch({
            type: HIDE_DIALOG,
        });
    }
};

初始化redux的store中的state:
下面的dialog是state中的一项。
const INITIAL = {
    dialog: {
        title: '',
        message: '',
        button: [],
        show: false
    }
};


//收到action后,如何用action参数中的值去改变redux的state的值.
也就是如何将随action而来的值映射到store的state中。
export default (state = INITIAL, action) => {
    switch (action.type) {
    case SHOW_DIALOG:
            return Object.assign({}, state, {
                dialog: {
                    title: action.title,
                    message: action.message,
                    button: action.button || [],
                    show: true
                }
            });
        case HIDE_DIALOG:
            return Object.assign({}, state, {
                dialog: {
                    title: '',
                    message: '',
                    button: [],
                    show: false
                }
            });


        default:
            return state;
    }
};



在component中:

/*
component通过下面的方法接收消息。
component收到消息后,component中的componetProperty属性将被
消息改变。

下面的方法将component的componetProperty属性映射到redux的state.app.dialog。
下面方法的主语是redux。
map redux 的 state to component 的 props

通过将redux的state映射到component的属性,
改变redux的state,就相当于component收到了消息。
redux通过改变自己的state向componet发送消息。
redux的state的改变就相当于改变了component的props。
component 通过 自己的props被改过,接收到消息。

*/
const mapStateToProps = (state) => ({
    componetProperty: state.app.dialog
});

/*
component通过下面的方法向外发布消息。
也就是component通过redux向外发布消息。
所发布消息的type是:Category.actions.addCategory
component通过调用自己 componentProperty(name) 方法,
就发布了此消息。

下面方法的主语是redux。
map redux 的 dispatch to 当前componet 的Props。

=>的左侧:
componentProperty: (name) 
是 component的Props

=>的右侧:
Category.actions.addCategory(dispatch)({ name })
是Redux中定义的action。


*/
const mapDispatchToProps = (dispatch, ownProps) => ({
    componentProperty: (name) => Category.actions.addCategory(dispatch)({ name })


redux由 state 和 action组成。 
Action 是一个对象。其中的type属性是必须的,表示 Action 的名称。其他属性可以自由设置。

相关文章:

  • 从错误信息思考一个问题:.NET Framework 与 COM/COM+ 到底有多深入的关联呢?
  • 两年后小米市值在100亿美元以下
  • 10月16日培训日记
  • AppStore上发布应用,当天就过审了
  • 生榴莲的处理办法
  • [技术评论]龙芯电脑
  • window 远程登陆
  • 终于知到X.509、H.263等名字的来历了
  • China-Pub和Dearbook 谁的销售更厉害?
  • view controller 屏幕旋转的总结
  • 强制旋转UIAlertView
  • 我被中国计算机教育的现实打败了
  • Unable to simultaneously satisfy constraints
  • 将Java包程序转换为Exe可执行文件
  • UIApplication openURL tel 在不同iOS版本上的表现实测
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • Apache的80端口被占用以及访问时报错403
  • Docker容器管理
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • learning koa2.x
  • php ci框架整合银盛支付
  • Redis在Web项目中的应用与实践
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 简单数学运算程序(不定期更新)
  • 简单易用的leetcode开发测试工具(npm)
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 力扣(LeetCode)357
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何实现 font-size 的响应式
  • 与 ConTeXt MkIV 官方文档的接驳
  • 运行时添加log4j2的appender
  • 智能合约开发环境搭建及Hello World合约
  • NLPIR智能语义技术让大数据挖掘更简单
  • UI设计初学者应该如何入门?
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #etcd#安装时出错
  • (11)MSP430F5529 定时器B
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)hibernate缓存
  • .Net(C#)自定义WinForm控件之小结篇
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @media screen 针对不同移动设备
  • @selector(..)警告提示
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [ 转载 ] SharePoint 资料
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成
  • [C/C++]数据结构 循环队列