深入理解react+redux

react+redux的一些思考

我們經(jīng)常把react和redux放到一起.react大家都很熟悉,我們先簡(jiǎn)單的看下redux

什么是redux?

redux我理解就是一個(gè)狀態(tài)管理器,它提供了二個(gè)基本的接口函數(shù)createStore和applyMiddleware

 import {createStore, applyMiddleware} from "redux";
 const reducer = (state, action) => {
       if(action.type == "add") {
         return {
            ...state,
            list:state.list.concat([action.payload])
         }
       }
       return state
 }    
 var store = createStore(reducer, {name:"leiwuyi", list:[]})
 //這樣一個(gè)最基本的redux就創(chuàng)建了

我們來(lái)看看createStore里面發(fā)生了什么?

  • 1.createStore傳入reducer創(chuàng)建了store, 建立了一個(gè)訂閱了關(guān)系 store---訂閱--->reducer
  • 2.只要store運(yùn)行dispatch觸發(fā)reducer
  • 3.運(yùn)行reducer就會(huì)返回newState

applyMidderware呢?applyMidderware就是給在dispatch里面注入了一些功能.就像
var fn = debounce(fn) fn函數(shù)注入到debounce(防抖)里面使fn具有防抖的功能,在這里先不討論它.

呃呃,redux就這樣????那跟react有毛線的關(guān)系?。???

react通信

我們先來(lái)看看react通信方式, 以一個(gè)日歷插件為例子吧

2`2@_L{D9AK_E9_CW~FIX9L.png

在React里面是這樣的

var DateShow = (props) => {
    return <div>props.date</div>
}
var Date = (props) =>{
    return <div>日期頁(yè)</div>
}
var DateDetail = (props) => {
    return <div>日期詳情</div>
}
var Main = (props) =>{
    return (
        <div>
            <div>拿到點(diǎn)擊的日期,渲染list</div>
            <div className="left">
                <DateShow />
                <Date />
            </div>
            <div className="right">
                <DateDetail />
            </div>
        </div>)
}

.子與父,父與子之間的通信

Date有個(gè)初始的日期,然后點(diǎn)擊的date拿到當(dāng)前的日期這時(shí)Main需要重新渲染list,

<Date onChangeDate={(date)=>this.renderList(date)} />

<Date onChangeDate={(date)=>this.renderList(date)}  initDate="2017-07-20"/>

子與子通信

點(diǎn)擊date,DateDetail根據(jù)date渲染詳情頁(yè).那么只能這樣,點(diǎn)擊date之后Main拿到date,然后把date傳入DateDetail中

<Date onChangeDate={(date)=>this.setState({date})}  />

<DateShow date={this.state.date}  />

思考

如果Main不需要渲染list,那么setState({Date})對(duì)于Main來(lái)說(shuō)就是額外冗余的狀態(tài)了,如果Date與DateDetail與通信非常多的,例如還有星期,點(diǎn)擊星期那個(gè)DateDetail發(fā)生什么!那么Main就需要setState({week})...這僅僅是二個(gè)子組件互相通信,如果是4個(gè),5個(gè).冗余的狀態(tài)就非常非常多,Main將無(wú)法維護(hù)下去。那么能不能這樣,Date與DateDatail直接進(jìn)行通信?

react+redux

我們可以在Date進(jìn)行diapatch, store觸發(fā)reducer拿到新的statem然后在DateDetail接收newState來(lái)重新渲染ui.這樣Main就不需要去存儲(chǔ)額外的state和函數(shù)項(xiàng)目更易維護(hù),那么問(wèn)題來(lái)了如何建立這種通信關(guān)系?.僅僅靠redux是很難完成的.例如Date如何dispatch?DateDetail怎么拿到newState?

react-redux

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容