React Redux簡單實現

2021-09-16 18:33:00 字數 3945 閱讀 5819

1.web應用是乙個狀態機,試圖與狀態是一一對應的.

2.所有的狀態,儲存在乙個物件裡.

1.store

store就是儲存資料的地方,你可以把它看成乙個容器,整個應用只能有乙個store.

redux提供createstore這個函式,用來生成store.

import  from 'redux';

const store = createstore(reducer);

createstore函式接受另乙個reducer函式作為引數,返回新生成的store物件.

2.state

state物件包含所有資料,如果想得到某個時點的資料,就要對store生成快照,這種時點的資料集合,

就叫做state.當前時刻的state,可以通過store.getstate()拿到.

const state = store.getstate();
3.action

state的變化,會導致view的變化,但是,使用者接觸不到state,只能接觸到view,所以.stated的變化必須是view導致的.action就是view發出的通知,表示state應該要發生變化了.

action是乙個物件,其中的type屬性是必須的,表示action的名稱,其他屬性可以自由設定.

const action = ;
action的名稱是add_todo,它攜帶的資訊是字串learn redux.

可以這樣理解,action描述當前發生的事情,改變state的唯一方法,就是使用action,它會運送資料到store.

4.action creator

view要傳送多少種資訊,就會有多少種action,可以定義乙個函式生成action,這個函式就叫actioncreator.

const add_todo = '新增 todo';

function addtodo(text)

}

5.store.dispatch()

store.dispatch()是view發出action的唯一方法.

store.dispatch(addtodo('learn redux'));
6.reducer

store收到action以後,必須給出乙個新的state,這樣view才會發生變化.

這種state的計算過程就叫做reducer.

reducer是乙個函式,他接受action和當前state作為引數,返回乙個新的state.

export default (state = 0, action) => 

}

reducer函式收到名為add的action以後,就返回乙個新的state,作為加法的計算結果,其他計算的邏輯,

也可以根據action的不同來實現.

實際應用中,reducer函式不用像上面這樣手動呼叫,store.dispatch方法會觸發reducer的自動執行.

為此,store需要知道reducer函式,做法就是生成store的時候,將reducer傳入createstore方法.

const store = createstore(reducer);
createstore接受reducer作為引數,生成乙個新的store.以後每當store.dispatch傳送過來乙個新的action,

就會自動呼叫reducer,得到新的state.

7.純函式

reducer函式最重要的特徵是,它是乙個純函式,也就是說,只要是同樣的輸入,必須得到同樣的輸出.

由於reducer是純函式,就可以保證同樣的state,必定得到同樣的view,但正因為這一點,reducer函式裡面不能改變

state,必須返回乙個全新的物件.

return object.assign({}, state, )

export default (state = 0, action) =>

}

8.store.subscribe()

store允許使用store.subscribe方法設定監聽函式,一旦state發生變化,就自定執行這個函式.

store.subscribe(listener);
顯然,只要把view的更新函式(render或this.setstate)放入listen,就會實現view的自動渲染.

let unsubscribe= store.subscribe(() => console.log(store.getstate()));

unsubscribe();

1.store.getstate(),store.dispatch(),store.subscribe()

let  = createstore(reducer);
reducer函式負責生成state,由於整個應用只有乙個state物件,包含所有資料,對於大型應用來說,這個state

必然十分龐大,導致reducer函式也十分龐大.

redux提供了乙個combinereducers方法,用於reducer的拆分,你只要定義各個子render函式,

然後用這個方法,將它們合成乙個大的reducer.

import  from 'redux';

const chatreducer = combinereducers()

1.使用者發出action

store.dispatch(action);
2.store自動呼叫reducer,並且傳入兩個引數,當前state和收到的action.reducer會返回新的state.

3.state一旦有變化,store就會呼叫監聽函式.

store.subscribe(listener);
4.listener可以通過store.getstate()得到當前狀態,如果使用的是react,這時可以觸發重新渲染view.

function listerner()
import react,  from 'react';

import from 'react-dom';

import reducer from '../reducers/reducer.js';

import from 'redux';

const store = createstore(reducer);

constructor(props) ;

}handleadd = () => );

}handledel = () => );

}handleget = () => )

}handleajax = () => );

}).catch((err) => );})}

render() )

});return (

adddel

獲取資料

獲取ajax資料);}

}

export default (state = 0, action) => , state, );

case 'decrement':

return object.assign({}, state, );

case 'getsource':

return object.assign({}, state, );

case 'ajax':

return object.assign({}, state, )

case 'ajaxerror':

return object.assign({}, state, );

default:

return state

}}

自己實現React Redux

redux 官方提供的 react 繫結庫。具有高效且靈活的特性。1 首先provider是乙個頂層容器元件,接收乙個store引數 import react from react import proptypes from prop types export default class provi...

react redux的實現原理

react redux框架可以用來對react native進行資料流管理。redux是乙個用於ui布局框架的標準庫。redux的概念是通過ui binding來將redux和react繫結到一起,這樣可以避免ui 部分和store直接互動。從元件布局來講,當我們在構建乙個大型元件,且內部每個小模組...

詳細簡單的搭建react redux

最近完成vue的學習,轉過頭來學習react,按照vue的思想,先過幾遍官網文件,熟悉一下語法,然後就直奔路由,路由我是一路踩一坑,給我是弄的頭大的很,一看react官網什麼也沒有提,redux也是什麼也沒有,默默的流下新手不友好的眼淚。進入正題,在學習react redux之前,需要了解乙個red...