redux教程(二)redux的相关示例以及实现原理
2018-03-25 19:52
513 查看
简单示例
前面一个章节,我介绍了一下redux的基本概念,那么利用前面讲的那些基本概念,我在这里,写一个关于redux的最简单的示例。import { createStore } from 'redux'; const store = createStore(function(){ return { userName:'mapbar_front', age: 26 } }) console.log(store.getState());//可以得知,打印出来的是一个对象。
接着,我们可以通过store.getState() 这个方法,得到这个对象的值。
class App extends Component{ render(){ return ( <div className="fx1 wrapper"> 我是中国人 <div> 我的名字是:{store.getState().userName} </div> &l 4000 t;div> 我的年龄是:{store.getState().age} </div> </div> ) } } render(<App />,document.getElementById('root'));
实现原理
如果,仔细观察,我们就会知道,store的三个核心函数。store.getState
store.dispatch
store.subscribe
围绕着三个核心函数,可以对createState的实现,如下所示。
function createStore(reducer){ var state,listeners = []; const getState = () => state; const dispatch = (action) => { state = reducer(state,action); listeners.forEach(item => item()) } const subscribe = (listener) => { listeners.push(listener); return ()=>{ listeners = listeners.filter(item => item != listener) } } dispatch({}); return { getState, dispatch, subscribe } }
这样,createStore就能够实现redux的功能了。
下面是一个实现的完整的测试示例,能够对数字进行加减操作:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function createStore(reducer){ var state,listeners = []; const getState = () => state; const dispatch = (action) => { state = reducer(state,action); listeners.forEach(item => item()) } const subscribe = (listener) => { listeners.push(listener); return ()=>{ listeners = listeners.filter(item => item != listener) } } dispatch({}); return { getState, dispatch, subscribe } }
</script>
</head>
<body>
<div id="root"></div>
<button onclick="addEvent()">+</button>
<button onclick="decEvent()">-</button>
</body>
<script>
function reducer(state = 0,action) {
switch (action.type){
case "ADD":
return state+1;
break;
case "DEC":
return state-1;
break;
default:
return state
}
}
var store = createStore(reducer);
var obj = document.getElementById('root');
obj.innerHTML = store.getState();
store.subscribe(function () {
obj.innerHTML = store.getState();
})
function addEvent(){
store.dispatch({type: 'ADD'})
}
function decEvent() {
store.dispatch({type: "DEC"})
}
</script>
</html>
相关文章推荐
- RunLoop原理以及深度实现,RunLoop相关的部分Foundation API
- 视频教程:卡尔曼滤波器的原理以及在MATLAB中的实现
- Unity Shader:实现菲涅尔+色散效果以及相关原理解析
- IOS-SDWebImage 底层实现原理以及面试题相关问题的学习链接
- Unity Shader:实现菲涅尔+色散效果以及相关原理解析
- 视频教程:卡尔曼滤波器的原理以及在MATLAB中的实现
- Map数据结构以及Map相关方法的底层实现原理
- 浅谈spring,基本编程模式和实现原理,以及相关操作流程
- react-redux高阶组件connect方法使用介绍以及实现原理
- 关于JVM中方法调用的相关指令,以及解析(Resolution)和分派(Dispatch)的解释——重载的实现原理与重写的实现原理
- 移动开发之【微信小程序】的原理与权限问题以及相关的简易教程
- 移动开发之【微信小程序】的原理与权限问题以及相关的简易教程
- 【EntityFramework系列教程三,翻译】在ASP.NET MVC程序中使用EntityFramework对数据进行排序、过滤筛选以及实现分页
- android APK更新原理以及代码实现
- j2ee jquery分页原理以及实现
- 用java读写ini配置文件的原因以及实现 示例
- 【机器学习】ICA 原理以及相关概率论,信息论知识简介
- ZooKeeper教程资源收集(简介/原理/示例/解决方案)
- Java集合之ArrayList和LinkedList的实现原理以及Iterator详解