首先纠正个误区,redux能够配合jq等框架使用,并不仅仅局限于react。为了让全部人都看懂,咱们这里先只实现一个最简单版本的 html+redux.js的使用。html
随着单页面应用的复杂,多个没有联系的组件之间想要共享状态(state)很困难,Redux的出现解决了数据问题 react
![]()
说了这么多,看不懂?不要紧,就是有三个概念 state、reducer、action。下面咱们一一讲解APIgit
function createStore(reducer) { //将状态放到一个盒子里 别人改不了
...
}
let store = createStore(reducer)
复制代码
store对象包含全部数据。若是想获得某个时点数据,就要对Store生成快照。这种时间点的数据集合,就叫作State。 当前时刻的State,能够经过store.getState()拿到。github
let state = store.getState()
复制代码
let action = {
type:"change_title_text",
text:"改变标题了"
}
复制代码
let store = createStore(reducer);
store.dispatch(action) //action=>{type:"change_title_text",text:"改变标题了"}
复制代码
let reducer = function(state,action){
return new_state;
}
复制代码
废话了这么多,很庆幸把基本概念说完了,终于来个实战来看看具体怎么工做的。咱们作一个最简单计算器,点击加1,来看看redux怎么工做的redux
let initState = {number:0}
复制代码
let createStore=(reducer)=> { //将状态放到一个盒子里 别人改不了
let state ; //声明状态
function dispatch(action) { //派发 参数是action动做,action是一个对象
state= reducer(state,action); //调用写好的方法,这个方法会返回一个新的状态
}
dispatch({}); //内部须要先定义次
let getState = ()=> JSON.parse(JSON.stringify(state)); //获取状态的方法 深拷贝
return {
getState,
dispatch
};
}
复制代码
当看不懂时,只要知道目的只有一个,就是在给state赋默认值。 先dispatch({})=>reducer(state,action)。就能够赋默认值拉,至于为何,往下看bash
let reducer=(state=initState,action)=> { //管理员,负责如何更改状态的
switch (action.type) { //更改状态 要有一个新的状态覆盖掉
case "add":
return {number:state.number+action.count}
}
return state;
};
复制代码
好了,到目前为止,咱们来梳理下思路框架
let store = createStore(reducer);
function render() {
let content = document.querySelector('.content');
content.innerHTML = store.getState().getState().number;
}
render();
复制代码
目前为止,一切完美,那咱们怎么点击按钮改变状态,只能经过store.dispatch()方法异步
btn.onclick = function () {
store.dispatch({type:"add",count:5});
render()
}
复制代码
到目前为止,一个最简单的redux应用算实现了,其实redux仍是比较简单的,重点是理解它概念,后续会讲解在react中如何使用redux函数