為了方便使用,redux的作者封裝了乙個react專用的庫react-redux,講解之前,先來了解一下什麼是容器元件和傻瓜元件?
react-redux把元件分為容器元件和傻瓜元件(ui元件)。
容器元件,負責和redux store打交道的元件,處於外層。
功能:和redux store打交道,讀取store的狀態,用於初始化元件的狀態,同時還要監聽store的狀態改變;當store狀態發生變化時,需要更新元件狀態,從而驅動元件重新渲染;當需要更新store狀態時,就會派發action物件。
特徵:傻瓜元件也叫做ui元件,只專心負責渲染介面的元件,處於內層。
功能:根據當前props和state,渲染出使用者介面。
特徵:簡單一句話:ui元件負責ui的呈現,容器元件負責管理資料和邏輯。
下邊是容器元件和傻瓜元件的分工圖:
react-redux提供了兩個最主要的功能:
語法如下:
export default connect(
mapstatetoprops,
mapdispatchtoprops
)(home)
接收兩個引數mapstatetoprops和mapdispatchtoprops,執行結果依然是乙個函式,所以才在最後又加乙個圓括號,把connect函式執行的結果立即執行,這一次引數是home這個傻瓜元件。
這裡有兩次函式執行,第一次是connect函式的執行,第二次是把connect函式返回的函式再次執行,最後產生的就是容器元件。
作為容器元件,要做的工作無外乎兩件事:
乙個是內層傻瓜物件的輸入,乙個是內層傻瓜物件的輸出。
因此,connect的完整api如下:
import from 'react-redux'
export default connect(
mapstatetoprops,
mapdispatchtoprops
)(home)
mapstatetoprops是乙個函式,它建立乙個從外部的state物件到ui元件的props物件的對映關係。
function mapstatetoprops(state)
}
上面**中,mapstatetoprops是乙個函式,接受state作為引數,返回乙個物件。這個物件有乙個number屬性,代表ui元件的同名引數,後面的count也是乙個函式,可以從state算出number的值。
下面就是count的乙個例子:
import from 'redux'
const initialstate=;
function update(state = initialstate, action) ;
case 'decrease':
console.log("decrease");
console.log(state);
return ;
default:
return state;
}}export default combinereducers()
mapstatetoprops會訂閱store,每當state更新的時候,就會自動執行,重新計算ui元件的引數,從而觸發ui元件的重新渲染。
mapstatetoprops的第乙個引數總是state物件,還可以使用第二個引數,代表容器元件的props物件。
const mapstatetoprops = (state, ownprops) =>
}
使用ownprops作為引數後,如果容器元件的引數發生變化,也會引發ui元件重新渲染。
mapdispatchtoprops是connect函式的第二個引數,用來建立ui元件的引數到store.dispatch方法的對映。也就是說,它定義了哪些使用者操作應該當做action傳給store。
function mapdispatchtoprops(dispatch)
}
connect方法生成容器元件以後,需要讓容器元件拿到state物件,才能生成ui元件的引數。
provider就是把我們用redux建立的store傳遞到內部的其他元件,讓內部元件可以享有這個store並提供對state的更新。
import react, from 'react';
import from 'redux'
import from 'react-redux'
import from 'react-router-dom';
import from 'react-router'
import reducers from '../reducer/index.js'
import home from '../views/home.js'
import another from '../views/another.js'
const store = createstore(reducers);
export default class routerindex extends component
}
文中主要用到了react-redux和react-router兩個外掛程式
原始碼見:
徹底弄懂session,cookie,token
我在寫之前看了很多篇session,cookie的文章,有的人說先有了cookie,後有了session。也有人說先有session,後有cookie。感覺都沒有講的很清楚,泛泛而談。希望本篇文章對大家有所幫助 注 本文需要讀者有cookie,session,token的相關基礎知識。什麼是無狀態呢...
徹底弄懂 Unicode 編碼
原文 今天,在學習 node.js 中的 buffer 物件時,注意到它的 alloc 和 from 方法會預設用utf 8編碼,在陣列中每位對應 1 位元組的十六進製制數。想到了之間學習 es6 時關於字串的 unicode 表示法,突然就很想知道 utf 16 是如何進行編碼的,我嘗試將一些漢字...
徹底弄懂Redis set篇
redis中有兩種集合,一種是無序集合,一種是有序集合,他們之間的相同點就是不重複,不同點就是是否有序,我們分別介紹一下。因為set只要保證加入的元素不重複就好,所以他的底層實現也比較簡單,就是乙個value為空的雜湊表,key就是用來儲存加入的元素值的,我們今天重點介紹的就是sort set 有序...