首先糾正個誤區,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函數