摘要:數(shù)據(jù)流簡單介紹,比較簡潔,請牢記于心。有時候可以使用生成器來批量生產(chǎn)相似對象,如我需要根據(jù)不同的來生成高度相似的附加的信息說明雖然上面數(shù)據(jù)流提到,通過處理生成后才能夠更改信息。
白話Redux工作原理。淺顯易懂。Redux 約法三章 唯一數(shù)據(jù)源(state)
如有紕漏或疑問,歡迎交流。
雖然redux中的state與react沒有聯(lián)系,但可以簡單理解為react組件中的this.state。
html文檔只是state的一種表現(xiàn)形式。所有html的數(shù)據(jù)應(yīng)該都是直接或間接來自于state,否則UI視圖是無法因state改變而更新的。
不應(yīng)該直接修改state數(shù)據(jù)。
對于數(shù)組使用:
Array.prototype.slice()//對數(shù)組進行拷貝 //使用ES6: [...state, ...newState]
對于對象使用:
Object.assign({}, state, change1, change2...)//對對象進行拷貝 //使用ES6: {...state, ...newState}通過純函數(shù)(pure function)改變數(shù)據(jù)源(state)
pure function: 無其他API(包括Math, Date等)調(diào)用,無異步操作,preState => newState。
Redux數(shù)據(jù)流簡單介紹store/reducer/action, 比較簡潔,請牢記于心。
store
UI唯一數(shù)據(jù)來源,可以理解為react中的state,store信息的變化會觸發(fā)視圖更新.
action
對象。必須擁有type屬性,用來描述發(fā)生什么。可選擇攜帶發(fā)生時的數(shù)據(jù),如用戶輸入的input value。切記:僅僅用來表述發(fā)生了什么。
reducer
pure function(上面有解釋)。根據(jù)action.type來做出反應(yīng),(preState, action) => newState,生成的state是用來改變store的。
所以,data flow(數(shù)據(jù)流):
UI發(fā)出動作,如click, submit;
action, 描述發(fā)生了什么;
reducer處理發(fā)生的事情,生成新state;
store被更新;
UI響應(yīng)store更新
...
Redux action舉幾個例子,可能會比較直觀:
{ type: “TOGGLE_TODO”, //這個type屬性必須要,必須是字符串 index: 5 //附加信息,自己根據(jù)需要選擇是否加入 }; { type: “ADD_TODO”, text:“學(xué)習(xí)Redux” //附加信息,這里是input value }
沒別的,就是這么簡單。
有時候可以使用action生成器(action creators)來批量生產(chǎn)相似action對象,如:
//我需要根據(jù)不同的input value來生成高度相似的action: function (text) { return { type: "ADD_TODO", text: text //附加的信息 } }
說明
雖然上面數(shù)據(jù)流提到,action通過reducer處理生成newState后才能夠更改store信息。但是為了更好的語義編程,Redux通過語句store.dispatch(action)來更新store,reducer對action的處理在內(nèi)部處理。
很簡單
(theState, action) => (newState); //僅僅只是根據(jù)action.type處理一下需要更新的state
來看一個相對完整的reducer:
function todoApp(state = initialState, action) { //注意需要處理undefined情況下的state默認值 switch (action.type) { //根據(jù)action.type來判斷 case "SET_VISIBILITY_FILTER": return Object.assign({}, state, { visibilityFilter: action.filter }) case “ADD_TODO”: //處理“ADD_TODO”的action type //返回新state(newState),注意不要直接改變state,對象使用了 //Object.assign()。也可以使用ES的...操作符 return Object.assign({}, state, { todos: [ ...state.todos, { text: action.text, completed: false } ] }) case “TOGGLE_TODO”: //處理“TOGGLE_TODO”的action type return Object.assign({}, state, { todos: state.todos.map((todo, index) => { if (index === action.index) { return Object.assign({}, todo, { completed: !todo.completed }) } return todo }) }) default: return state } }Redux store
store
UI視圖唯一數(shù)據(jù)來源(直接或間接),可以獲取state,更新state,監(jiān)聽state變化,取消監(jiān)聽。所以store提供了一下方法:
store.getState() 獲取當(dāng)前state
store.dispatch(action) 更新state
store.subscribe(listener) store更新后回調(diào)listener,回調(diào)函數(shù)里面可以調(diào)用store.getStore()來獲取更新后得state喲~
取消listener的方式比較特別:再調(diào)用一次store.subscribe(sameListner)
ps: 如有紕漏或疑問,歡迎交流。
先寫這么多,有時間繼續(xù)更新。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/95886.html
摘要:數(shù)據(jù)流簡單介紹,比較簡潔,請牢記于心。有時候可以使用生成器來批量生產(chǎn)相似對象,如我需要根據(jù)不同的來生成高度相似的附加的信息說明雖然上面數(shù)據(jù)流提到,通過處理生成后才能夠更改信息。 白話Redux工作原理。淺顯易懂。 如有紕漏或疑問,歡迎交流。 Redux 約法三章 唯一數(shù)據(jù)源(state) 雖然redux中的state與react沒有聯(lián)系,但可以簡單理解為react組件中的this.st...
摘要:更多資源請文章轉(zhuǎn)自月份前端資源分享的作用數(shù)組元素隨機化排序算法實現(xiàn)學(xué)習(xí)筆記數(shù)組隨機排序個變態(tài)題解析上個變態(tài)題解析下中的數(shù)字前端開發(fā)筆記本過目不忘正則表達式聊一聊前端存儲那些事兒一鍵分享到各種寫給剛?cè)腴T的前端工程師的前后端交互指南物聯(lián)網(wǎng)世界的 更多資源請Star:https://github.com/maidishike... 文章轉(zhuǎn)自:https://github.com/jsfr...
摘要:希望大家在這浮夸的前端圈里,保持冷靜,堅持每天花分鐘來學(xué)習(xí)與思考。 今天的React題沒有太多的故事…… 半個月前出了248個Vue的知識點,受到很多朋友的關(guān)注,都強烈要求再出多些React相前的面試題,受到大家的邀請,我又找了20多個React的使用者,他們給出了328道React的面試題,由我整理好發(fā)給大家,同時發(fā)布在了前端面試每日3+1的React專題,希望對大家有所幫助,同時大...
摘要:另外,內(nèi)置的函數(shù)在經(jīng)過一系列校驗后,觸發(fā),之后被更改,之后依次調(diào)用監(jiān)聽,完成整個狀態(tài)樹的更新。總而言之,遵守這套規(guī)范并不是強制性的,但是項目一旦稍微復(fù)雜一些,這樣做的好處就可以充分彰顯出來。 這一篇是接上一篇react進階漫談的第二篇,這一篇主要分析redux的思想和應(yīng)用,同樣參考了網(wǎng)絡(luò)上的大量資料,但代碼同樣都是自己嘗試實踐所得,在這里分享出來,僅供一起學(xué)習(xí)(上一篇地址:個人博客/s...
閱讀 2038·2021-10-08 10:05
閱讀 1882·2021-09-22 15:31
閱讀 3003·2021-09-22 15:13
閱讀 3478·2021-09-09 09:34
閱讀 2072·2021-09-03 10:46
閱讀 3113·2019-08-30 15:56
閱讀 1697·2019-08-30 15:53
閱讀 2351·2019-08-30 15:44