国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

redux常見概念

geekzhou / 2906人閱讀

摘要:地址應(yīng)用是一個狀態(tài)機,視圖與狀態(tài)是一一對應(yīng)的。只是把和聯(lián)系在一起的對象,并不是傳統(tǒng)意義上象征數(shù)據(jù)的東西。提供方法獲取提供方法更新這是一條新聞通過注冊監(jiān)聽器通過返回的函數(shù)注銷監(jiān)聽器。該回調(diào)函數(shù)必須返回一個純對象,這個對象會與組件的合并。

redux

gif地址

Web 應(yīng)用是一個狀態(tài)機,視圖與狀態(tài)是一一對應(yīng)的。

所有的狀態(tài),保存在一個對象里面。

redux不依賴于react

state

就是app中數(shù)據(jù)組成的樹,也是一個普通的js對象。樹的結(jié)構(gòu)根據(jù)應(yīng)用的需要自行決定,官方推薦的方式是分為三種數(shù)據(jù):

后端提供的應(yīng)用數(shù)據(jù)

應(yīng)用狀態(tài)數(shù)據(jù) (某條數(shù)據(jù)是否選中)

ui組件的數(shù)據(jù)(彈窗是否打開)

action

action是一個描述“發(fā)生了什么”的普通對象
action是我們開發(fā)的應(yīng)用程序和store間通信的信息,它就是普通的js對象,結(jié)構(gòu)是自定義的,信息量應(yīng)盡可能小。
例如:

{
  type: "ADD_NEWS",
  text: "這是一條新聞"
}
action creator

action創(chuàng)建函數(shù)

function addNews(text) {
  return {
    type: "ADD_NEWS",
    text
  }
}
reducer

reducer是根據(jù)action來返回一個全新state的純函數(shù)。

function newsReducer(state = initialState, action) {
  switch (action) {
      case: "ADD_NEWS":
        return [...state, text]
        break;
    default:
        return state;
  }
}
store

store只是把actions和reducers聯(lián)系在一起的對象,并不是傳統(tǒng)意義上象征數(shù)據(jù)的東西。

const store = createStore(rootReducer, defaultState)

提供 getState() 方法獲取 state
提供 dispatch(action) 方法更新 state; store.dispatch(addNews("這是一條新聞"))
通過 subscribe(listener) 注冊監(jiān)聽器
通過 subscribe(listener) 返回的函數(shù)注銷監(jiān)聽器。

react-redux 容器組件(container)和展示組件(component)

component只關(guān)注展示層。
container是通過connect方法把redux和展示組件關(guān)聯(lián)起來的東西。

combineReducers

combineReducers(reducers)
傳入reducers作為參數(shù), reducers是一個object,如 {news: function() {...}, blogs: function() {...}}
返回一個遍歷執(zhí)行所有reducers的reducer函數(shù),每個reducer只處理state中對應(yīng)自己key的部分.

bindActionCreators

bindActionCreator

function bindActionCreator(actionCreator, dispatch) {
  return (...args) => dispatch(actionCreator(...args))
}

bindActionCreators就是把多個actionCreator變成會去執(zhí)行dispatch的函數(shù),并且返回這個對象。

connect

連接 React 組件與 Redux store。連接操作不會改變原來的組件類。反而返回一個新的已與 Redux store 連接的組件類。

1.mapStateToProps
如果定義該參數(shù),組件將會監(jiān)聽 Redux store 的變化。任何時候,只要 Redux store 發(fā)生改變,mapStateToProps 函數(shù)就會被調(diào)用。該回調(diào)函數(shù)必須返回一個純對象,這個對象會與組件的 props 合并。如果你省略了這個參數(shù),你的組件將不會監(jiān)聽 Redux store。如果指定了該回調(diào)函數(shù)中的第二個參數(shù) ownProps,則該參數(shù)的值為傳遞到組件的 props,而且只要組件接收到新的 props,mapStateToProps 也會被調(diào)用(例如,當(dāng) props 接收到來自父組件一個小小的改動,那么你所使用的 ownProps 參數(shù),mapStateToProps 都會被重新計算)

// 把state上的todos綁定到 組件.props.todos
function mapStateToProps(state) {
  return { todos: state.todos }
}

export default connect(mapStateToProps)(TodoApp)

2.mapDispatchToProps
(Object or Function): 如果傳遞的是一個對象,那么每個定義在該對象的函數(shù)都將被當(dāng)作 Redux action creator,而且這個對象會與 Redux store 綁定在一起,其中所定義的方法名將作為屬性名,合并到組件的 props 中。如果傳遞的是一個函數(shù),該函數(shù)將接收一個 dispatch 函數(shù),然后由你來決定如何返回一個對象,這個對象通過 dispatch 函數(shù)與 action creator 以某種方式綁定在一起(提示:你也許會用到 Redux 的輔助函數(shù) bindActionCreators())。如果你省略這個 mapDispatchToProps 參數(shù),默認情況下,dispatch 會注入到你的組件 props 中。如果指定了該回調(diào)函數(shù)中第二個參數(shù) ownProps,該參數(shù)的值為傳遞到組件的 props,而且只要組件接收到新 props,mapDispatchToProps 也會被調(diào)用。

export function mapDispatchToProps(dispatch) {
  return bindActionCreators(actionCreators, dispatch);
}

// 下面兩種方式效果一致
var App = connect(mapStateToProps, actionCreators)(Main);
var App = connect(mapStateToProps, mapDispatchToProps)(Main);
Provider

包裹Provider讓所有container都能訪問store

store.dispatch(action)

store.dispath(action)會執(zhí)行reducer(currentState, action)并return action。原生的dipatch只支持普通js對象來作為參數(shù),否則會報錯。

redux middleware

它提供的是位于 action 被發(fā)起之后,到達 reducer 之前的擴展點。(?)
其實就是在dispatch前后做一些額外的事情的一個函數(shù),這個函數(shù)就是middleware, 有多個middlewares也就是嵌套地執(zhí)行這多個函數(shù)。

const logger = ({ dispatch, getState }) => next => action => {
  console.log("dispatching", action)
  let result = next(action)
  console.log("next state", getState())
  return result
}


export default function applyMiddleware(...middlewares) {
  return (createStore) => (reducer, preloadedState, enhancer) => {
    const store = createStore(reducer, preloadedState, enhancer)
    let dispatch = store.dispatch
    let chain = []

    const middlewareAPI = {
      getState: store.getState,
      dispatch: (action) => dispatch(action)
    }
    chain = middlewares.map(middleware => middleware(middlewareAPI))
    dispatch = compose(...chain)(store.dispatch)

    return {
      ...store,
      dispatch
    }
  }
}

const middlewares = [logger]

const store = createStore(
  reducer,
  applyMiddleware(...middlewares)
)

redux thunk

通過redux middleware實現(xiàn)支持dispatch一個函數(shù)。

function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => next => action => {
    if (typeof action === "function") {
      return action(dispatch, getState, extraArgument);
    }

    return next(action);
  };
}

const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;

export default thunk;

stackoverflow上的介紹。
容器組件和展示組件相分離

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

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

相關(guān)文章

  • React專題:react,redux以及react-redux常見一些面試題

    摘要:我們可以為元素添加屬性然后在回調(diào)函數(shù)中接受該元素在樹中的句柄,該值會作為回調(diào)函數(shù)的第一個參數(shù)返回。使用最常見的用法就是傳入一個對象。單向數(shù)據(jù)流,比較有序,有便于管理,它隨著視圖庫的開發(fā)而被概念化。 面試中問框架,經(jīng)常會問到一些原理性的東西,明明一直在用,也知道怎么用, 但面試時卻答不上來,也是挺尷尬的,就干脆把react相關(guān)的問題查了下資料,再按自己的理解整理了下這些答案。 reac...

    darcrand 評論0 收藏0
  • 【全棧React】React 30天教程索引

    摘要:今天我們將討論創(chuàng)建組件的最終方案,即無狀態(tài)函數(shù)的純組件。今天我們正在研究一種處理提出的復(fù)雜數(shù)據(jù)的方法,稱為體系結(jié)構(gòu)。第天部署介紹今天,我們將探討部署我們的應(yīng)用所涉及的不同部分,以便外界可以使用我們的應(yīng)用。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3758原文:https://www.fullstackreact.com/3...

    appetizerio 評論0 收藏0
  • 前端每周清單半年盤點之 React 與 ReactNative 篇

    摘要:前端每周清單半年盤點之與篇前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點分為新聞熱點開發(fā)教程工程實踐深度閱讀開源項目巔峰人生等欄目。與求同存異近日,宣布將的構(gòu)建工具由遷移到,引發(fā)了很多開發(fā)者的討論。 前端每周清單半年盤點之 React 與 ReactNative 篇 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點;分為...

    Barry_Ng 評論0 收藏0
  • 一篇文章讀懂 React & redux 前端開發(fā)

    摘要:如在中在中,聚合積累的結(jié)果是當(dāng)前的對象。被稱為副作用,在我們的應(yīng)用中,最常見的就是異步操作。至于為什么我們這么糾結(jié)于純函數(shù),如果你想了解更多可以閱讀,或者它的中文譯本函數(shù)式編程指南。 DvaJS: React and redux based, lightweight and elm-style framework. https://dvajs.com/ 實例項目源碼:https://g...

    cppowboy 評論0 收藏0
  • 【譯】像數(shù)據(jù)庫一樣設(shè)計你的 redux 數(shù)據(jù)

    摘要:一些常見的方法如果你需要存儲一些每個項目都帶有的數(shù)據(jù),可以使用或者對象數(shù)組來保存。數(shù)組對象這是最常見的一種范式。對象數(shù)組這讓你可以遍歷列表并輕松訪問和值,但是它做到以的時間復(fù)雜度快速訪問,因為它是一個數(shù)組。 翻譯:瘋狂的技術(shù)宅作者:Nick Sweeting英文標題:Shape your redux store like your database英文原文:https://hacker...

    XanaHopper 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<