内容简介:先来个图说明下:Redux的设计就继承了Flux的架构,并将其完善,提供了多个API供开发者调用。借着react-redux,可以很好的与React结合,开发组件化程度极高的现代Web应用。(PS:本文笔者是废材,智商比较低 如有不当之处,敬请谅解。)
先来个图说明下:
Redux的设计就继承了Flux的架构,并将其完善,提供了多个API供开发者调用。借着react-redux,可以很好的与React结合,开发组件化程度极高的现代Web应用。(PS:本文笔者是废材,智商比较低 如有不当之处,敬请谅解。)
先说store
Store — 数据存储中心,同时连接着Actions和Views。一般创建是用createStore这个方法。createStore的作用就是:创建一个store来管理app的状态,唯一改变状态的方式就是dispatch一个action,最终返回一个object。
作用:
1、Store需要负责接收Views传来的Action
2、然后,根据Action进行修改。(action智障简单版本)
3、最后Store通知views 进行改变也就是我们常用到setState。
(ps:说到setState 就说下它原理吧)
setState(updater, callback)这个方法是用来告诉react组件数据有更新,有可能需要重新渲染。它是异步的,react通常会集齐一批需要更新的组件,然后一次性更新来保证渲染的性能,说到异步大佬们不用担心,里面还有个锁的。还有因为异步的原因,就会出现一个问题,就是你setState后马上拿是拿不到的。
如果有大佬想获取的话,可以简单粗暴的从callback 中获取,也可以利用下react的生命周期,来看一波。如下图
其实在react16后是有改变的,传送门来一波: https://juejin.im/post/5b6f18... 这个写的不错。
看完react生命周期的大佬都知道用componentDidUpdate来获取数据了。
有些小可爱可能会说既然是异步的那么我来一波神仙操作:
这个就是刚才说的setState是有锁的,那个锁其实就是遇到这种神仙操作react 会如下处理的。
也就是我最后会被最后的覆盖的。
说起我们每次修改完Store 接收action 通知后是怎么修改存数据的,这个就由Reducer来处理了。如下图
在一个app里,只能有一个store,如果你想指明不同的state对应不同的action,可以用combineReducers去合并不同的reducer。
Reducer
这玩意的就是一个函数,有两个好处、
1、数据拆解
2、数据不可变(immutability)(ps:如果数据大复杂需要什么撤销各种时也很显Immutable api d的传送门如下: https://juejin.im/entry/5992c...
这些写的一个简单的项目用到过这个东西,还不错。还有一个更轻量的玩意,传送门: https://juejin.im/post/5bf3fa...
react 有一个原则就是单项数据流,不像vue 中的双向数据绑定。说起这个有个传送门给各位大佬的: https://cruyun.github.io/2018...
就是讲到双向ng的双向数据脏检测。
回到主题
因为是单向数据流,一旦数据多的话就会很头疼,祖先组件需要那些,父组件通过props传递一些数据给子组件,其实在渲染时候是构建了两颗树的vd树和组件树。说到vd 就简答说下吧
React的虚拟Dom和其diff算法,是React渲染效率远远高于传统dom操作渲染效率的主要原因。一方面,虚拟Dom的存在,使得在操作Dom时,不再直接操作页面Dom,而是对虚拟Dom进行相关操作运算。再通过运算结果,结合diff算法,得出变更过的部分Dom,进行局部更新。另一方面,当存在十分频繁的操作时,会进行操作的合并。直接在运算出最终状态之后才进行Dom的更新。从而大大提高Dom的渲染效率。
因为那个很复杂有兴趣可以看下diff吗,不过各位大佬都应该看过。
还是惯例传送门走起: https://juejin.im/post/5cb7ee...
其实嘛,想提高效率用shouldComponentUpdate这个函数还是有用的,这个
进行判断是否有必要进行对该组件进行更新(即,是否执行该组件render方法以及进行diff计算)
关于这个也有传送门
https://www.cnblogs.com/pengh...
上面说的好像被移除还是有问题,太久没写react了。。。所以没关注了。
Middleware
Redux 的中间件提供的是位于 action 被发起之后,到达 reducer 之前的扩展点,换而言之,原本 view -> action -> reducer -> store 的数据流加上中间件后变成了 view -> action -> middleware -> reducer -> store ,在这一环节我们可以做一些 “神仙操作的” 的操作。
http://www.ruanyifeng.com/blo...
其实可以看看这个
Provider存在的意义在于:想通过context的方式将唯一的数据源store传递给任意想访问的子孙组件。
connect
Redux中的connect方法,跟Reflux.connect方法有点类似,最主要的目的就是:让Component与Store进行关联,即Store的数据变化可以及时通知Views重新渲染。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Development Recipes
Brian P. Hogan、Chris Warren、Mike Weber、Chris Johnson、Aaron Godin / Pragmatic Bookshelf / 2012-1-22 / USD 35.00
You'll see a full spectrum of cutting-edge web development techniques, from UI and eye candy recipes to solutions for data analysis, testing, and web hosting. Make buttons and content stand out with s......一起来看看 《Web Development Recipes》 这本书的介绍吧!