成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

React,Redux學習筆記

lauren_liuling / 897人閱讀

摘要:維護著一個全局的,并且根據(jù)來進行事件分發(fā)處理。如果想和其它框架集成,使用或者來設置定時器,或者發(fā)送請求,可以在該方法中執(zhí)行這些操作。在該函數(shù)中調(diào)用將不會引起第二次渲染。在該方法中執(zhí)行任何必要的清理,比如無效的定時器,或者清除在中創(chuàng)建的元素。

@(StuRep)2016.06.10

React的PropTypes使用方法
React.PropTypes.array // 數(shù)組

React.PropTypes.bool.isRequired // Boolean 且必要。 

React.PropTypes.func // 函式 

React.PropTypes.number // 數(shù)字

React.PropTypes.object // 對象 

React.PropTypes.string // 字符串 

React.PropTypes.node // 任何類型的: numbers, strings, elements 或者任何這種類型的數(shù)組

React.PropTypes.element // React 元素 

React.PropTypes.instanceOf(XXX) // 某種類型的實例

React.PropTypes.oneOf(["foo", "bar"]) // 其中一個字符串

React.PropTypes.oneOfType([React.PropTypes.string,React.PropTypes.array]) // 其中一種格式類型

React.PropTypes.arrayOf(React.PropTypes.string) // 某種類型的數(shù)組(字符串型) 

React.PropTypes.objectOf(React.PropTypes.string) // 具有某種屬性類型的對象(字符串類型) 

React.PropTypes.shape({ // 是否符合指定格式的對象
    color: React.PropTypes.string, 
    fontSize: React.PropTypes.number 
}); 

React.PropTypes.any.isRequired // 可以是任何格式,且必要。 

_

react-redux中的connect方法
//綁定狀態(tài)到props上面
function mapStateToProps(state) {
    return {
        year: state.calendarReducer.year,
        month: state.calendarReducer.month,
        day: state.calendarReducer.day
    }
}

//把action所有方法綁定到props上面,同時action具有了dispatch能力
function mapDispatchToProps(dispatch) {
    return {actions: bindActionCreators(CalendarActions, dispatch)}
}

export default connect(mapStateToProps, mapDispatchToProps)(App)

mapStateToProps 監(jiān)聽store變化,添加這個才能讓組件監(jiān)聽到store里面的狀態(tài);

Redux 有一個全局的state,通過將根組件包進Provider,將store分發(fā)給所有的子組件,而子組件通過connect方法,獲取dispatch事件分發(fā)函數(shù),以及需要的props(如果有需要也可以通過connect傳入想分發(fā)給子組件的action)
_

如何用Redux去管理React的狀態(tài)
在不使用Redux的時候,React組件間的狀態(tài)管理需要一層層地傳遞,使用Redux可以在最頂層的store中存儲所有的狀態(tài),每個組件都可以獲得這些狀態(tài)值。
Redux主要的三部分:

Store

Action

Reducer

簡單的流程:dispatch(action)把action分發(fā)到reducer,reducer更新狀態(tài)然后返回到store,總的容器組件(app)從store(this.props)中獲取的值有變,傳給子組件的屬性變化,觸發(fā)render重新渲染。

action

Redux中,action主要用來傳遞操作State的信息,以一個js對象的形式存在,除了其中的type字段為必須的,其他字段都可以定義。如果采用直接聲明action的方式,在action越來越多的時候就會很難管理,所以有了action的構(gòu)造工廠:

//action創(chuàng)建函數(shù)
export function getNextMonth() {
    return {type: GET_NEXT_MONTH}
}
reducer

action用來傳遞信息,reducer就用來處理信息,傳入一個舊的state來返回一個新的state。

reducer應該保持“純函數(shù)”特性,入?yún)⑾嗤?,出參結(jié)果一定相同。這也是函數(shù)式編程的特點。

function calendarReducer(state = initialState, action) {

    switch (action.type) {
        case GET_NEXT_MONTH:
            return state.month >= 12 ? {...state, year: ++state.year, month: 1} : {...state, month: ++state.month};
        case GET_PRE_MONTH:
            return state.month <= 1 ? {...state, year: --state.year, month: 12} : {...state, month: --state.month};
        default:
            console.log("default calendarReducer state");
            return state;
    }
}

在reducer中,需要傳入一個默認的state參數(shù),在dispatch一個action區(qū)觸發(fā)state修改的時候,如果reducer中并沒有匹配到該action,那就一定要返回一個舊的state,不然會造成undefined。

另外,在修改狀態(tài)的時候,不要通過直接修改當前state,而是通過創(chuàng)建一個副本去修改,可以用ES6中的Object.assign方法:

return Object.assign({}, state, {
        XXX:XXX
})

或者使用ES7提案中的對象展開運算符(...):

switch (action.type) {
        case GET_NEXT_MONTH:
            return state.month >= 12 ? {...state, year: ++state.year, month: 1} : {...state, month: ++state.month};
        case GET_PRE_MONTH:
            return state.month <= 1 ? {...state, year: --state.year, month: 12} : {...state, month: --state.month};
        default:
            console.log("default calendarReducer state");
            return state;
    }

在使用ES7的展開運算符的時候需要添加一個插件來支持,因為目前該語法還處于stage2階段:

query: {
        presets: ["react", "es2015"],
        plugins: ["transform-object-rest-spread"]
}
store

在 Redux 項目中,Store 是單一的。維護著一個全局的 State,并且根據(jù) Action 來進行事件分發(fā)處理 State??梢钥闯?Store 是一個把 Action 和 Reducer 結(jié)合起來的對象。

Redux 提供了 createStore() 方法來 生產(chǎn) Store,如:

let store = createStore(calendarApp);

react-redux 提供一個組件把整個app包在里面,以 React 組件的形式來為 Provider 注入 store,從而使得其子組件能夠在上下文中得到 store 對象,共享同一個store,如:

let rootElement = document.getElementById("main");

render(
    
        
    ,
    rootElement
);

_

組件的生命周期 componentWillMount
componentWillMount()

服務器端和客戶端都只調(diào)用一次,在初始化渲染執(zhí)行之前立刻調(diào)用。如果在這個方法內(nèi)調(diào)用 setState,render() 將會感知到更新后的 state,將會執(zhí)行僅一次,盡管 state 改變了。

componentDidMount
componentDidMount()

在初始化渲染執(zhí)行之后立刻調(diào)用一次,僅客戶端有效(服務器端不會調(diào)用)。在生命周期中的這個時間點,組件擁有一個 DOM 展現(xiàn),可以通過 this.getDOMNode() 來獲取相應 DOM 節(jié)點。

如果想和其它JavaScript 框架集成,使用setTimeout 或者setInterval 來設置定時器,或者發(fā)送 AJAX 請求,可以在該方法中執(zhí)行這些操作。

componentWillReceiveProps
componentWillReceiveProps(object nextProps)

在組件接收到新的 props 的時候調(diào)用。在初始化渲染的時候,該方法不會調(diào)用。

用此函數(shù)可以作為 reactprop 傳入之后, render() 渲染之前更新 state 的機會。老的 props 可以通過 this.props 獲取到。在該函數(shù)中調(diào)用 this.setState() 將不會引起第二次渲染。

shouldComponentUpdate
boolean shouldComponentUpdate(object nextProps, object nextState)

在接收到新的 props 或者 state,將要渲染之前調(diào)用。該方法在初始化渲染的時候不會調(diào)用,在使用 forceUpdate 方法的時候也不會。

如果確定新的 propsstate 不會導致組件更新,則此處應該 返回 false。

shouldComponentUpdate: function(nextProps, nextState) {
  return nextProps.id !== this.props.id;
}

如果 shouldComponentUpdate 返回 false,則 render() 將不會執(zhí)行,直到下一次 state 改變。(另外,componentWillUpdatecomponentDidUpdate 也不會被調(diào)用。)

默認情況下,shouldComponentUpdate 總會返回 true,在 state 改變的時候避免細微的 bug,但是如果總是小心地把 state 當做不可變的,在 render() 中只從 props state 讀取值,此時可以覆蓋 shouldComponentUpdate 方法,實現(xiàn)新老 propsstate 的比對邏輯。

如果性能是個瓶頸,尤其是有幾十個甚至上百個組件的時候,使用 shouldComponentUpdate 可以提升應用的性能。

componentWillUpdate
componentWillUpdate(object nextProps, object nextState)

在接收到新的 props 或者 state 之前立刻調(diào)用。在初始化渲染的時候該方法不會被調(diào)用。
使用該方法做一些更新之前的準備工作。

componentDidUpdate
componentDidUpdate(object prevProps, object prevState)

在組件的更新已經(jīng)同步到 DOM 中之后立刻被調(diào)用。該方法不會在初始化渲染的時候調(diào)用。
使用該方法可以在組件更新之后操作 DOM 元素。

componentWillUnmount
componentWillUnmount()

在組件從 DOM 中移除的時候立刻被調(diào)用。

在該方法中執(zhí)行任何必要的清理,比如無效的定時器,或者清除在 componentDidMount中創(chuàng)建的 DOM 元素。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/90991.html

相關文章

  • react-native, react-navigation, redux 學習筆記

    摘要:的使用用戶發(fā)出函數(shù)算出新的重新渲染三大原則單一數(shù)據(jù)源,利用的形式向下傳播數(shù)據(jù)流決定只讀,通過修改通過純函數(shù)來修改組件狀態(tài),是描述動作的純函數(shù)連接和基于全局的,選擇我們要注入的不同的組件分開把注入,讀取方法三劍客先確定一下初始狀 redux的使用 react-native, react, react-redux, react-navigaition, redux-thunk, redu...

    妤鋒シ 評論0 收藏0
  • 好程序員React精品項目全集:商城管理后臺(視頻+源碼+筆記

    摘要:今天給大家?guī)砹撕贸绦騿T實戰(zhàn)項目商城管理后臺。配合項目學習會讓你更快掌握它的使用方法下面就來看看好程序員這套實戰(zhàn)項目課程介紹好程序員項目本項目是一個使用開發(fā)的商城系統(tǒng)的管理后臺,里面登錄判斷,接口調(diào)用,數(shù)據(jù)展示和編輯,文件上傳等后臺功能。 眾所周知,項目經(jīng)驗對于一個程序員變得越來越重要。在面...

    李世贊 評論0 收藏0
  • Redux 基礎 - react 全家桶學習筆記(一)

    摘要:二基礎就是一個普通的。其他屬性用來傳遞此次操作所需傳遞的數(shù)據(jù),對此不作限制,但是在設計時可以參照標準。對于異步操作則將其放到了這個步驟為添加一個變化監(jiān)聽器,每當?shù)臅r候就會執(zhí)行,你可以在回調(diào)函數(shù)中使用來得到當前的。 注:這篇是16年10月的文章,搬運自本人 blog...https://github.com/BuptStEve/... 零、環(huán)境搭建 參考資料 英文原版文檔 中文文檔 墻...

    aaron 評論0 收藏0
  • FE.SRC-React實戰(zhàn)與原理筆記

    摘要:異步實戰(zhàn)狀態(tài)管理與組件通信組件通信其他狀態(tài)管理當需要改變應用的狀態(tài)或有需要更新時,你需要觸發(fā)一個把和載荷封裝成一個。的行為是同步的。所有的狀態(tài)變化必須通過通道。前端路由實現(xiàn)與源碼分析設計思想應用是一個狀態(tài)機,視圖與狀態(tài)是一一對應的。 React實戰(zhàn)與原理筆記 概念與工具集 jsx語法糖;cli;state管理;jest單元測試; webpack-bundle-analyzer Sto...

    PumpkinDylan 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<