redux的詳細介紹和使用!

 

三層react

視圖(view)
數據商店(store)
reducer npm

流程: 用戶操做視圖 視圖產生action 經過store轉發給reducer(同時還會接收store中的數據模型 state)redux

由reducer結合aciton.type以及state 產生新的 state 而後返回給 storesegmentfault

store在接收到新的state後 通知視圖進行更新ide

redux使用:函數

須要安裝2個模塊
npm i redux react-redux -S工具

建立store
import redux from "redux"網站

export let store = redux.createStore(reducer)this

reducer的定義
export let reducer = (state={title:""},action){
switch(action.type){
case "xxx":
return newState = {...state,xxx:ddd}
break
default:
return state
}
}spa

視圖內使用
綁定更新視圖函數
this.unbind = store.subscribe(()=>{})
解綁更新視圖函數
this.unbind()

發送action
sotre.dispatch(action)


工具方法
1自動生成容器組件

前提 整個應用須要用<Provider>包裹起來 而且要注入store 例如:
import {Provider} from "react-redux"

let App = props => (
<Provider store={store}>
<Router>
<Switch>
<Route />
....
</Switch>
</Router>
</Provider>
)

render(<App/>,docu....)

而後在UI組件內 導入connect方法

import {connect} from "react-redux"

class UI extends React.Component{
...
}

let mstp = state => {
return {
title : state.home.title
}
}
//在組件內 使用 this.props.title

let mstp = dispatch => {
return {
sayHello : function(){
....
}
}
}

//在組件內使用sayHello方法 : this.props.sayHello()
//若是在函數中要發送action 則調用dispatch便可

export let Home = connect(mstp,mdtp)(UI)


合併reducer
能夠對reducer按照功能或者頁面進行劃分紅多個小的reducer
而後經過 combineReducers 具體以下

let reducer1 = (state={...},action)=>{
...
}

let reducer2 = (state={...},action)=>{
...
}

import {combineReducers} from "redux"

export let reducer = combineReducers({
home : reducer1,
list : reducer2
})

 

參考網站:https://segmentfault.com/a/1190000011474522?utm_source=tag-newest

相關文章
相關標籤/搜索