成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

React,Redux學(xué)習(xí)筆記

lauren_liuling / 857人閱讀

摘要:維護(hù)著一個(gè)全局的,并且根據(jù)來進(jìn)行事件分發(fā)處理。如果想和其它框架集成,使用或者來設(shè)置定時(shí)器,或者發(fā)送請(qǐng)求,可以在該方法中執(zhí)行這些操作。在該函數(shù)中調(diào)用將不會(huì)引起第二次渲染。在該方法中執(zhí)行任何必要的清理,比如無效的定時(shí)器,或者清除在中創(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 // 對(duì)象 

React.PropTypes.string // 字符串 

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

React.PropTypes.element // React 元素 

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

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

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

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

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

React.PropTypes.shape({ // 是否符合指定格式的對(duì)象
    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
    }
}

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

export default connect(mapStateToProps, mapDispatchToProps)(App)

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

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

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

Store

Action

Reducer

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

action

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

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

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

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

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中,需要傳入一個(gè)默認(rèn)的state參數(shù),在dispatch一個(gè)action區(qū)觸發(fā)state修改的時(shí)候,如果reducer中并沒有匹配到該action,那就一定要返回一個(gè)舊的state,不然會(huì)造成undefined。

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

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

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

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的展開運(yùn)算符的時(shí)候需要添加一個(gè)插件來支持,因?yàn)槟壳霸撜Z法還處于stage2階段:

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

在 Redux 項(xiàng)目中,Store 是單一的。維護(hù)著一個(gè)全局的 State,并且根據(jù) Action 來進(jìn)行事件分發(fā)處理 State。可以看出 Store 是一個(gè)把 Action 和 Reducer 結(jié)合起來的對(duì)象。

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

let store = createStore(calendarApp);

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

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

render(
    
        
    ,
    rootElement
);

_

組件的生命周期 componentWillMount
componentWillMount()

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

componentDidMount
componentDidMount()

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

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

componentWillReceiveProps
componentWillReceiveProps(object nextProps)

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

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

shouldComponentUpdate
boolean shouldComponentUpdate(object nextProps, object nextState)

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

如果確定新的 propsstate 不會(huì)導(dǎo)致組件更新,則此處應(yīng)該 返回 false。

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

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

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

如果性能是個(gè)瓶頸,尤其是有幾十個(gè)甚至上百個(gè)組件的時(shí)候,使用 shouldComponentUpdate 可以提升應(yīng)用的性能。

componentWillUpdate
componentWillUpdate(object nextProps, object nextState)

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

componentDidUpdate
componentDidUpdate(object prevProps, object prevState)

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

componentWillUnmount
componentWillUnmount()

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90991.html

相關(guān)文章

  • react-native, react-navigation, redux 學(xué)習(xí)筆記

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

    妤鋒シ 評(píng)論0 收藏0
  • 好程序員React精品項(xiàng)目全集:商城管理后臺(tái)(視頻+源碼+筆記

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

    李世贊 評(píng)論0 收藏0
  • Redux 基礎(chǔ) - react 全家桶學(xué)習(xí)筆記(一)

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

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

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

    PumpkinDylan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<