redux超易学三篇之二(开始使用react-redux)
其实 redux 真正让人感到混乱的还是在 react-redux 的使用中。
请配合完整代码参考~:完整源代码
也不是说混乱,主要是网上 推崇 最佳实践。学习一个新东西的时候,本来就很陌生,上来就用最佳实践,当然让人摸不着头脑。
其实搞定 react-redux 主要分两点:
容器组件 和 展示组件 的最佳实践 (难就难在这里,系统架构层次的难)
办法:想办法精通react props 的传值。
另外一个就是 react-redux 的固定用法了。
1.数据从哪里来? 高阶组件(容器组件)其实就是解决这么一个问题。 --- 高阶组件是一个函数!!!函数!!!
严格地区分了各国人的进入,就能防止罪犯的逃逸。
你们懂的,如果希望稳定,有时候就需要滴水不漏。
单独举个例子区分一下,数据的来源假设有三种
- localStorage
- 调用web接口获得的
- state里面的数据
这里参考 react 小书的(要付钱哦):http://huziketang.mangojuice.top/books/react/lesson28
也可以直接看我代码 src 层的 higher/simple 中的 demoCreateHigher、demoUseHigher 文件。
demoCreateHigher:一个函数,参数是 (组件,需要从本地获取的属性),返回一个带 props 的组件。
完成了获取本地数据的 逻辑。
demoUseHigher:先定义了一个组件,此后使用demoCreateHigher创建了一个我们真正需要的组件(相当于类的实例化)。
总结:当有两个组件都需要从 本地 localStorage 加载相关的数据,上述的高阶组件就能很好地 实现逻辑的复用。复用的同时也将 获取数据的 逻辑和纯组件 解耦。
一举两得。
2.然后我们通过对数据的剥离,构造纯组件,降低耦合性。
其实可以这样理解: 容器组件 = 高阶组件(函数) 处理过后的 展示组件。=>也就是我们第一点说的 处理完逻辑 之后的展示组件。
| 展示组件 | 容器组件 | |
|---|---|---|
| 作用 | 展示样式和骨架 | 描述如何运行?数据获取/状态更新 |
| 直接使用redux? | 否 | 是 |
| 数据来源 | props | 监听redux |
| 数据修改 | 调用props中的回调函数 | 由redux派发 |
| 调用方式(这个我没理解) | 手动 | 由react-redux生成 |
上面贴了一张官网的图(http://www.redux.org.cn/docs/basics/UsageWithReact.html),拿我们之前的 redux 例子来 架构一下吧~
我们之前的 reducer 有什么内容呢? 创造奇迹 和 通过成长改变人的状态 和 添加女朋友(不存在的,已PASS)
展示组件
- MiracleList:用于展示奇迹列表(可以被添加)
miracle: [] / Array ---- 结构 {text: ''}
method: itemClick(这里刚开始不用你redux的时候使我们写在app层测试的,但是用上 redux 后就用其对应的 高阶组件处理后传给它了) - MiracleItem:专门展示奇迹事项
text: String
method: 来自 MiracleList 传下来的 onClick ->onClick = {() => this.props.onClick()}
容器组件:其实这里主要是redux中的数据对 展示组价 中所需要的 数据的一种映射链接
MiracleInput:用于添加奇迹项目
因为其和 redux 联系较多,所以这里将其放置在容器组件中
容器组件(其实就是利用 store.subscribe() 将redux 和原来的组件链接起来的东西罢了)
完成了上面的步骤,其实我们就完成了 使用 redux 进行数据的 增加操作,其实这个时候我们已经基本能够使用 redux 了。
完成的 redux 还请切换分支到 react-redux-all 哦~~~~~
redux超易学三篇之二(开始使用react-redux)的更多相关文章
- redux超易学三篇之三(一个逻辑完整的react-redux)
配合源代码学习吧~ : 我是源代码 这一分支讲的是 如何完整地(不包含优化,也没有好看的页面) 搭建一个 增删改查 的 react-redux 系统 不同于上一节的 react-redux,这里主要采 ...
- redux超易学三篇之一(单独说redux)
redux其实非常简单.当复杂的步骤被拆分,其实每一步都是很容易的. Github: 完整代码链接 本文在 create-react-app 中的 index.js 随便引入了一下. (其实不必如此. ...
- Redux系列02:一个炒鸡简单的react+redux例子
前言 在<Redux系列01:从一个简单例子了解action.store.reducer>里面,我们已经对redux的核心概念做了必要的讲解.接下来,同样是通过一个简单的例子,来讲解如何将 ...
- React + Redux 入坑指南
Redux 原理 1. 单一数据源 all states ==>Store 随着组件的复杂度上升(包括交互逻辑和业务逻辑),数据来源逐渐混乱,导致组件内部数据调用十分复杂,会产生数据冗余或者混用 ...
- 《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)
1.简介 其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇.那是因为这个比较重要,所 ...
- 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 第三篇 Entity Framework Plus 之 Query Cache
离上一篇博客,快一周,工作太忙,只能利用休息日来写一些跟大家分享,Entity Framework Plus 组件系列文章,之前已经写过两篇 第一篇 Entity Framework Plus 之 A ...
- 我的屌丝giser成长记-研三篇
进入研三以来,基本都是自己的自由时间了,从导师的项目抽离出来,慢慢的都交给师弟他们来负责.研三的核心任务就是找工作以及写毕业论文,因为有导师科研基金项目成果作为支撑,所以自己的论文没什么可担心,一切都 ...
随机推荐
- python3 破解 geetest(极验)的滑块验证码
Kernel_wu 快速学习的实践者 python3 破解 geetest(极验)的滑块验证码 from selenium import webdriver from selenium.webdriv ...
- WebApi 通过身份票据进行认证授权的具体实现
写在前面: 如果webapi接口没有身份认证,那么所有知道接口url的用户都可以随意访问接口,从而查询或者修改数据库, 那么问题就来了,如果我们不想让所有人都调用我们的接口,那么就需要加上一层验证,只 ...
- Resin 的watchdog(看门狗)介绍和resin负载均衡实现
为了稳定和安全,Resin使用一个独立的watchdog进程来启动和监视Resin服务器.watchdog连续你检测Resin服务器的状态,如果其没有反应或者迟钝,将会重启Resin服务器进程.大多数 ...
- 【bzoj1024】[SCOI2009]生日快乐
1024: [SCOI2009]生日快乐 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2372 Solved: 1717[Submit][Statu ...
- QPS、PV和需要部署机器数量计算公式
QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS是 Transactions ...
- YII 模型关联之 一对一
需求,一个用户对应一个用户信息表, 这两者之间的关系就是一对一 //首先查找出一个用户出来 $user=Users::find()->'])->one(); //然后查询, 第一个参数是 ...
- 命令行编译java的一点总结
今天在使用命令行编译时遇到些问题,顺便又仔细分析了一些基础知识,记录总结一下. 下面使用javac和java命令都是在 D:\Workspace\java目录下执行的: 1 //Inner.java ...
- ubuntu16.04 ARM平台移植xmlrpc-c1.39.12
1. xmlrpc-c依赖与libcurl 参考另外一篇随笔:https://www.cnblogs.com/flyinggod/p/10148228.html 2. 下载源代码 http://xml ...
- 22.NULL 值
NULL 值是遗漏的未知数据. 默认地,表的列可以存放 NULL 值. 本章讲解 IS NULL 和 IS NOT NULL 操作符. SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不 ...
- 使用"*"通配符来选择文件
Include 方法和IncludeDirectory 方法中的搜索模式中指定的虚拟路径可以接受一个"*"通配符字符作为前缀或后缀,以在最后一个路径段.搜索字符串是大小写不敏感的. ...