摘要:首先要明白工作的過程組件通過去觸發(fā)里面的,然后返回一個新的去改變里面的值。一個應(yīng)用只有一個,接收作為參數(shù)。創(chuàng)建,把和聯(lián)系起來組件通過組件可以訪問到里面特定的和避免因為監(jiān)聽所有變化造成性能問題。
首先要明白工作的過程:組件通過dispatch action去觸發(fā)store里面的reducer,然后reducer返回一個新的state去改變store里面的值。我們dispatch的action里面必須寫明白type是啥,這樣reducer里面進行switch action.type的時候才能匹配到需要return的state是什么樣的,因為可能沒有匹配的type,所以reducer必須寫一個默認的return state。
然后開始通過例子說明:
從actions開始吧。 actions其實就是一個對象,這個對象留著給組件dispatch給reducer。我們經(jīng)常看到的是返回action對象的函數(shù)。像這樣子
function addOne() {//+1 return { type: "ADD_ONE" } } function reduceOne() {//-1 return { type: "REDUCE_ONE" } } function addCustomNumber(number) {//接收一個參數(shù),等著給reducer取出來去改變state的值 return { type: "ADD_CUSTOM_NUM", number } }
接下來是reducer,也就是和我們的state產(chǎn)生聯(lián)系的純函數(shù)。它接收兩個參數(shù),第一個是state,可以賦值一個state的初始狀態(tài),第二個參數(shù)是action,也就是我們的組件通過dispatch一個action的時候,store會把這個action作為參數(shù)傳給reducer。
const initialState = {count: 0}; const counter = (state = initialState, action) => { switch (action.type) { case "ADD_ONE": return { count: state.count + 1}; case "REDUCE_ONE": return { count: state.count - 1}; case "ADD_CUSTOM_NUM": debugger return { count: state.count + action.number} default: return state; } }
store: 一個應(yīng)用只有一個store,createStore接收reducer作為參數(shù)。如果有多個reducer可以用combineReducer把多個reducer結(jié)合在一起傳給createStore。
const store = createStore(counter);//創(chuàng)建store,把reducer和state聯(lián)系起來
組件:通過connect(mapStateToProps, mapDispatchToProps)(組件) 可以訪問到store里面特定的state和action,避免因為監(jiān)聽所有state變化造成性能問題。在mapDispatchToProps里面可以用bindActionCreators把dispatch和action creator綁定在一起,這樣就直接調(diào)用action creator函數(shù)就相當于直接dispatch了。最后,要把連接后的組件寫在provider里面,才能正常訪問到store。于是乎,又回到那個觀點,組件觸發(fā)dispatch action, store里面的reducer會判斷action的類型,然后返回新的state,state的變化也會觸發(fā)組件的更新。
export class Counter extends React.Component { render() { const { count, addOne, reduceOne, addCustomNumber } = this.props; return{count}} } function mapStateToProps(state) { return {count: state.count} } function mapDispatchToProps(dispatch) { //這樣寫就不用在組件里面還要去dispatch啦,直接把dispatch和actions createor綁定在一起, // 調(diào)用actions creator函數(shù)就是調(diào)用dispatch actions return bindActionCreators({addOne, reduceOne, addCustomNumber}, dispatch); } const WrappedCounter = connect(mapStateToProps, mapDispatchToProps)(Counter);//組件和store, actions連接起來,從而能在組件里面訪問store和actions
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/97750.html
摘要:提供了完整的環(huán)境,并且支持自定義域名指向,動態(tài)計算資源調(diào)整,可以完成各種應(yīng)用的開發(fā)編譯與部署。 react 新特性 react16 Context 算法相關(guān) 圖解排序算法(二)之希爾排序 微信小程序 微信小程序組件化的解決方案移動端尺寸基本知識 瀏覽器 前端必讀:瀏覽器內(nèi)部工作原理瀏覽器緩存原理解讀瀏覽器加載css和js及dom解析之間的關(guān)系瀏覽器緩存 CSS學(xué)習(xí) 移動web開發(fā)布局入...
摘要:在我看來它們的關(guān)系不會比共用開頭更深了,所以我就重新開了一個頭,但其實是基于前面寫的資源中文文檔英文文檔官方視頻學(xué)習(xí)歷程當初為了學(xué)習(xí),看了許多的材料,中途曾經(jīng)放棄兩次,但是最后還是勇敢的拿起了它,現(xiàn)在終于勉強弄懂。 0x000 概述 這一章開始講redux,其實是承接前面的react,但其實作為一個框架來說,redux和react并沒有太多的關(guān)系,本身是獨立存在的。在我看來它們的關(guān)系不...
摘要:本系列文章主要是介紹一些概念原理深入,適合有點基礎(chǔ)的初學(xué)者觀看。是狀態(tài)容器,提供可預(yù)測化的狀態(tài)管理。使用單向數(shù)據(jù)流,這意味著只能父組件傳遞給子組件。工作流工作流如下圖關(guān)于數(shù)據(jù)流的原理還有大佬不懂這個話,大佬可以點擊傳送門 本系列文章主要是介紹redux一些概念原理深入,適合有點react基礎(chǔ)的初學(xué)者觀看。分別講述了Reudx、React Hooks等內(nèi)容。部分內(nèi)容涉及源碼解析。 wh...
摘要:個人看來,一個狀態(tài)管理的應(yīng)用,無論是使用,還是,最困難的部分是在的設(shè)計。中,并沒有移除,而是改為用于觸發(fā)。也是一個對象,用于注冊,每個都是一個用于返回一部分的。接受一個數(shù)組或?qū)ο螅鶕?jù)相應(yīng)的值將對應(yīng)的綁定到組件上。 系列文章: Vue 2.0 升(cai)級(keng)之旅 Vuex — The core of Vue application (本文) 從單頁應(yīng)用(SPA)到服務(wù)器...
摘要:謹記,請勿犯這樣的錯誤。由于在之前的教程中,積累了堅實的基礎(chǔ)。其實,這是有緣由的其復(fù)雜度在早期的學(xué)習(xí)過程中,將會帶來災(zāi)難性的影響。該如何應(yīng)對對于來說,雖然有大量的學(xué)習(xí)計劃需要采取,且有大量的東西需要學(xué)習(xí)。 前言倘若你正在建造一間房子,那么為了能快點完成,你是否會跳過建造過程中的部分步驟?如在具體建設(shè)前先鋪設(shè)好部分石頭?或直接在一塊裸露的土地上先建立起墻面? 又假如你是在堆砌一個結(jié)婚蛋糕...
閱讀 1061·2023-04-26 02:02
閱讀 2401·2021-09-26 10:11
閱讀 3553·2019-08-30 13:10
閱讀 3743·2019-08-29 17:12
閱讀 720·2019-08-29 14:20
閱讀 2187·2019-08-28 18:19
閱讀 2230·2019-08-26 13:52
閱讀 954·2019-08-26 13:43