当前位置:网站首页>搞懂redux一篇就够了
搞懂redux一篇就够了
2022-07-30 05:40:00 【勿扰丶】
什么是redux
redux是一个应用数据流框架,主要解决了组件间状态共享的问题,原理是集中式管理,主要有三个核心方法:action,store,reducer,工作流程是view调用store的dispatch方法接收action为参数传入store,通过action.type判断执行对应的reducer进行store操作,view通过store提供的getState获取最新的数据。
redux的设计思想与工作原理
- 针对dispatch和subscribe
- 分别认识redux工作流中最为核心的dispatch动作以及redux自身独特的发布-订阅模式
- dispatch这个动作刚好把action,reducer和store这三个主角给串联了起来
dispatch这个动作- 调用dispatch,入参为action对象。
- 前值校验
- 上锁:将isDispatching置为true(防止套娃)
- 调用reducer,计算新的state
- 解锁:将isDispatching置为false
- 触发订阅
- 返回action
禁止套娃用意:作为计算state专用函数redux在设计reducer时就强调了他必须是纯净的,不应该额外的脏操作。
- subscribe并不是一个严格必要的方法,只有在需要监听状态的变化时我们才会调用它。
- redux默认了订阅对象就是’状态的变化(dispatch)‘这个事件。
- subscribe与redux主流程的结合
- 在store对象创建成功后,通过调用store.subscribe来注册监听
- 当dispatch.action发生时,redux会在reducer执行完毕后,将listeners数组中的监听函数逐个执行。
- 工作流:调用subscribe,入参是一个函数 - 前置校验 - 调用ensureCANMutateNextLieners确保nextListeners与currentListeners不指向同一个引用 - 注册监听函数,将入参listener函数推入nextListeners数组中 - 返回取消订阅当前listener的方法(unsubscribe)
- nextListeners注册监听,触发订阅,取消订阅,取消监听,currentListeners数组用于确保监听函数执行过程的稳定性
redux中间件
- 中间件的引用对redux工作流的改变。
- redux源码中只有同步操作,如果想要redux引入异步数据流需要使用中间件来增强createStore(redux-thunk).
- action - middleware - dispatch - reducer - nextState
- 中间件的执行时机是action被分发之后,reducer触发之前
- 执行前提:applyMiddleware将会对dispatch函数进行改写使dispatch在触发reducer之前会首先执行对redux中间件的链式调用。
- applyMiddleware是enhancer的一种,而enhancer的意思是增强器,它增强的正是createStore的能力。
边栏推荐
- Qt对动态库(*.dll)的封装以及使用
- C语言人机大战之三字棋博弈
- php实现数据库的增删查改操作-教务管理系统
- C语言指针(指针数组、数组指针、函数指针、传参、回调函数等)超详细
- Anaconda安装教程
- Different usage scenarios of subqueries as retrieval tables and the question of whether to add aliases
- Qt实现一个重复文件检测小工具(原理:通过md5校验)
- C语言(字符串,转义字符,关键字)
- Graphic mirror symmetry (schematic diagram)
- 用h1~h5标题时候,但是如果不要加粗的效果,处理方法如下
猜你喜欢
随机推荐
cnpm installation steps
MySQL user authorization
Application Practice | Application Practice of Apache Doris in Baidu Intelligent Cloud Billing System
Socket通信编程
多线程之间的5中通信方式
flask的笔记
使用Context API维护全局状态
‘kaggle视频游戏销售数据的可视化和分析‘项目实现
240.搜索二维矩阵II
Falling ants (Peking University entrance exam questions)
String类型字符串获取第一次或者最后一次出现的下标
646.最长数对链(动态规划)
St. Regis Takeaway Project: New dishes and dishes paged query
208.实现Trie树(字典树与哈希表实现)
字符串(一) 哈希
[GStreamer] The name of the plugin should match GST_PLUGIN_DEFINE
MySQL笔记(pymysql)
使用Nodejs搭建Web Server(入门教程)
0基础玩转C语言—初识C语言(下)
4461. Range Partition (Google Kickstart2022 Round C Problem B)