redux使用过程中遇到的两个致命的关键点

一、在reducer中,返回的state必须是全新的对象,否则,redux不会执行listening方法,因为redux会认为state没有更新过,没必要重新渲染view。

出现问题的例子:

const user=(state={name=‘‘,age=0},action)=>{
     switch(action.type){
            case ‘CHANGE_NAME‘:
                state.name=‘zhangsan‘;//在原object中修改name
                return state;
            default:
             return state;
    }
}

是的,就是这个例子,就算旧state的name值修改了,但是redux不会认为state作出改变的,我没有去看源代码(菜鸟,要研究比较久),但猜测是,redux给每个state附加key值了,所以,是通过判断key来决定要不要重新渲染view的。

二、redux的combineReducers方法,假设有reducer1(signUp)和reducer2(signIn),两个reducer都有action type(‘CHANGE_USERNAME‘),你会发现在其中一个view中修改username,另外一个username也会跟着改变,

也就是说,就算在不同的reducer里,最好也不要有相同的action type,否则会有脏数据产生。

时间: 2024-10-05 12:13:46

redux使用过程中遇到的两个致命的关键点的相关文章

聊一聊 MySQL 中的数据编辑过程中涉及的两阶段提交

MySQL 数据库中的两阶段提交,不知道您知道不?这篇文章就简单的聊一聊 MySQL 数据库中的两阶段提交,两阶段提交发生在数据变更期间(更新.删除.新增等),两阶段提交过程中涉及到了 MySQL 数据库中的两个日志系统:redo 日志和 binlog 文件. redo 日志前面已经介绍过了,就不再介绍了,简单的聊一聊 binlog 文件,binlog 是 MySQL server 层提供的二进制文件,因此所有的存储引擎都可以使用 binlog 功能,binlog 是追加写的逻辑日志,记录了执行

ServiceStack.Redis 使用过程中碰到的两个问题

Redis是一个非常NB的内存级的数据库,我们可以把很多"热数据"(即读写非常多的数据)放入其中来操作,这样就减少了和关系型数据库(如SqlServer/My Sql等)之间的交互,程序的响应速度也大大提升. C#利用ServiceStack.Redis来操作Redis,它是Redis官方推荐的C#客户端,性能非常优越,使用也很方便,但是我最近在使用这个工具的时候碰到两个问题: 1.每小时只能访问Redis 6000次 2.用  GetById  方法获取不到对象. 第一个问题一开始本

k8s 实验过程中遇到的两个小问题 端口 和 批量删除Error的pods

1. 自己kubeadm搭建的一套k8s系统 然后进行做实验 发现了几个问题 jenkins 创建 salves的时候总是有问题.  提示注册不上 然后 我修改了下yaml文件 暴露端口 50000 提示不支持的端口范围 端口仅支持 30000-32567 左右的几个端口 百度了下 来修改端口的范围 发现 有几个不一样的地方 我的是通过 docker化方式部署的 没有配置文件 只有yaml文件 简单参考了下 方法为: 找到 kubeadm 创建的默认文件位置 cd /etc/kubernetes

网站建设过程中性能优化的34条经验方法

1 .减少HTTP请求数量 (Minimize HTTP Requests) tag:content 80%的用户响应时间被花费在前端,而这其中的绝大多数时间是用于下载页面中的图片.样式表.脚本以及Flash这些组件.减少这些组件的数量就可以减少展示页面所需的请求数,而这是提高网页响应速度的关键. 朴素的页面设计当然是减少组件的一种途径,但有没有能兼顾丰富的页面内容和快速的响应速度的方法呢?下面就是一些不错的技巧,能在提供丰富的页面展现的同时,减少Http请求数量: 合并文件,通过把所有脚本置于

解决两张背景图轮换过程中出现缝隙的问题

横版游戏中有用到多张图片轮番显示作为动态背景.但我在实际项目中,发现图片在滚动时有可能出现缝隙,影响了游戏体验.经过分析,这是因为重置缓冲图片时产生了时间差. 轮番显示的原理就是一张图片滚动,另外一张作为缓冲,滚动出屏幕的图片继而替补成为缓冲,这样周而复始地轮换下去. 举一个例子: void TestSprite::onEnter() { CCLayer::onEnter(); CCActionInterval *move1 = CCMoveBy::create(5, ccp(-480, 0))

安装VMware workstation遇到的两个问题:安装过程中的DLL问题和安装后打开需要的管理权限问题

1.安装过程中遇到Microsoft runtime DLL安装程序未能完成安装的问题? 在遇到这个问题时不要点击确定,需要在开始菜单中输入%temp%,然后跳转到一个文件夹里,找到后缀为setup的文件夹(一般是第一个文件夹),然后双击打开找到vmware workstation的可执行文件,双击安装运行就可以了. 2.安装成功后在打开时遇到:您无权输入许可证密钥,请使用系统管理员账户重新尝试的问题? 遇到这种情况后使用系统管理员权限打开或者用系统管理员权限重新安装都不好使,在网络上找到的用c

Native项目迁入React-Native过程中遇到的坑(0.4x版本)

转载请注明出处王亟亟的大牛之路 最近都在忙着搭架子,找框架,谈需求和开会.甚至都没有时间好好装逼,昨天帮安卓的小伙把项目从安卓整体迁移到了RN的项目下面,过程中遇到很多不可描述的坑,这里给大家分享下经验 先安利,安卓收纳库:https://github.com/ddwhan0123/Useful-Open-Source-Android React-Native收纳库:https://github.com/ddwhan0123/Useful-Open-Source-React-Native 由来

懒加载(延迟加载)之后,在使用数据过程中容易出现的bug

在UI中,使用懒加载,也就是延迟加载来加载数据的时候,总是会面临几个问题? 如:1. >为什么先创建NSArray属性? 2. >为什么重写NSArray的get方法? 3.>为什么要判断是否为空? 4.>为什么下方代码"//1"这里不用NSString stringWithFormat: 而"//2"这里要使用? 5.>同时"//2"这里为什么使用的是%ld 来作为占位符? 这些问题不搞懂,懒加载就很难通透,  代

三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

版权声明:本文为sang原创文章,转载请注明出处. 目录(?)[+] 关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东.本篇博客我们不讲源码,只看使用.源码的解读会在下一篇博文中带来. inflate方法从大范围来看,分两种,三个参数的构造方法和两个参数的构造方法.在这两类中又有细分,OK,那我们就把各种情况都来演示一遍. 1.三个参数的in