【每日一题】说下你对Redux的理解
前端印记
共 5678字,需浏览 12分钟
· 2021-10-01
人生苦短,总需要一点仪式感。比如学前端~
Redux
目录:
分析
Redux 三大原则
Redux 原理
Redux 工作流程
分析
在 jQuery
时代的时候,我们是面向过程开发。随着 react
的普及,我们提出状态驱动 UI 的开发模式。
我们认为:Web 应用就是状态与 UI 一一对应的关系。但是随着我们的 web 应用日趋的复杂化,一个应用所对应的背后的 state
也变得越来越难以管理。而 redux
就是 web 应用的一个状态管理方案。Redux 是 Flux
思想的一种实现,同时又在其基础上做了改进。其主要体现在:
-
单向数据流 -
Store 是唯一的数据源
Redux 三大原则
-
单一数据源 -
State 只读 -
使用纯函数来修改
Redux 原理
Redux 源码主要分为几个模块文件:
-
compose.js
提供从右到左进行函数式编程 -
createStore.js
提供作为生成唯一 store 的函数 -
combineReducers.js
提供合并多个 reducer 的函数,保证 store 的唯一性 -
bindActionCreators.js
可以让开发者在不直接接触 dispatch 的前提下进行更改 state 的操作 -
applyMiddleware.js
这个方法可以通过中间件来增强 dispatch 的功能
const actionTypes = {
ADD: 'ADD',
CHANGEINFO: 'CHANGEINFO',
}
const initState = {
info: '初始化',
}
export default function initReducer(state=initState, action) {
switch(action.type) {
case actionTypes.CHANGEINFO:
return {
...state,
info: action.preload.info || '',
}
default:
return { ...state };
}
}
export default function createStore(reducer, initialState, middleFunc) {
if (initialState && typeof initialState === 'function') {
middleFunc = initialState;
initialState = undefined;
}
let currentState = initialState;
const listeners = [];
if (middleFunc && typeof middleFunc === 'function') {
// 封装dispatch
return middleFunc(createStore)(reducer, initialState);
}
const getState = () => {
return currentState;
}
const dispatch = (action) => {
currentState = reducer(currentState, action);
listeners.forEach(listener => {
listener();
})
}
const subscribe = (listener) => {
listeners.push(listener);
}
return {
getState,
dispatch,
subscribe
}
}
Redux 工作流程
-
const store = createStore(fn)
生成数据; -
action
:{ type:Symbol('action001'), payload:'payload1' }
定义行为; -
dispatch
发起 action:store.dispatch(doSomethingfn('action001'))
; -
reducer
处理 action,返回新的 state;
换句话解释是:
-
首先,用户(通过 view)发出 action
,发出方式用到了dispatch
方法 -
然后,store 自动调用 reducer
,并且传入两个参数:当前 state 和收到的 action,reducer 会返回新的state
-
state 一旦有变化, store
就会调用监听函数,来更新view
。
所有《每日一题》的 知识大纲索引脑图 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
你也可以点击文末的 “阅读原文” 快速跳转
让我们一起携手同走前端路!
关注公众号回复【加群】即可
评论
面试官:你懂 CDN 吗?
图解学习网站:https://xiaolincoding.com五一假期期间,图解网站的图片突然全部挂了,可以说是P0事故了,很多读者纷纷私信跟我说,图片挂了, 耽误他学习了!我还是很惊讶,节假日还挺多人在学习的呢,针不戳!这次的事故原因也比较简单,CDN 域名的证书过期了,因为图片是放在了 CDN
小林coding
2
如何画出漂亮的神经网络图?神经网络可视化工具集锦搜集
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达1. draw_convnet一个用于画卷积神经网络的Python脚本https://github.com/gwding/draw_convnet2. NNSVGhttp://alexlenail.me/NN-SVG/LeNet.
小白学视觉
0
如何看待稚晖君的时间管理水平?
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达计算机视觉life整理原文链接:https://www.zhihu.com/question/491456524/answer/2183081310稚晖君究竟是如何安排业余时间去做这么多高水平的项目?而且每个项目的用时也很少,普通
小白学视觉
2
三个优秀的PyTorch实现语义分割框架
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达转自 | 机器学习AI算法工程使用的VOC数据集链接开放在文章中,预训练模型已上传Github,环境我使用Colab pro,大家下载模型做预测即可。代码链接: https://github.com/lixiang007
小白学视觉
0
如何确定神经网络的层数和隐藏层神经元数量?
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达公众号:尤而小屋作者:呦呦鹿鸣编辑:Peter大家好,我是Peter~关于神经网络中隐藏层的层数和神经元个数充满了疑惑。刚好看到一篇文章很好地答疑了,分享给大家~https://zhuanlan.zhihu.com/p/10041
小白学视觉
0
神经网络之CNN与RNN的关系
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达1、CNN介绍CNN是一种利用卷积计算的神经网络。它可以通过卷积计算将原像素很大的图片保留主要特征变成很小的像素图片。本文以李宏毅老师ppt内容展开具体介绍。1.1 Why CNN for Image①为什么引入CNN ?图片示意
小白学视觉
0
“海优最初弄出来可并不是为了给大佬弟子开后门的, 学术界现在几乎不存在任何套利空间,不要相信有什么办法可以投机取巧”
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达知乎问题:为什么部分同学倾向土博+国外博后而不是直接国外读博?感觉身边土博越来越多,基本都是土博➕海博后,申国外phd的明显减少(相比较疫情之前几年)知乎Tianteman: 这个问题下,可以看得出一部分国内硕博信息检索能力差的离
小白学视觉
0
真高!比亚迪员工爆料比亚迪在越南的薪资水平:基本工资480万,全勤奖35万,交通补助20万,餐补110万,每周6天,每天10小时
上一篇:某大公司为逼迫员工离职,竟然把他的工位安排到厕所旁,没想到他直接开始记录领导的如厕时间,还发到公司大群...对此,你怎么看?--完--PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。全文完,感谢你的耐心阅读。如果你还想看到我的文章,请一定给本
开发者全社区
0