<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 詞匯表 這是有關Redux中的一些核心概念的詞匯表,以及他們的類型簽名。這些類型使用了 [流標注法](http://flowtype.org/docs/quick-reference.html)進行記錄。 ### State ~~~ type State = any; ~~~ *State* (也叫 *state tree*) 是一個寬泛的概念,但是在 Redux API 中它通常與被 store 所管理的,可以被 [`getState()`](#) 返回的,單獨 state 值相關。 它表示了一個 Redux應用的全部狀態,通常為一個多層嵌套的對象。 約定俗成,頂層 state 為一個對象,或幾個像 Map 那樣的鍵-值集合,當然是任意類型的話也成。當然,你仍然可以盡可能保持狀態的串行化。不要把什么都放進去導致無法容易地轉換成 JSON。 ### Action ~~~ type Action = Object; ~~~ *Action* 是一個用以表示要改變的 state 的意圖的普通對象。Action 是將數據拿到 store 里的唯一方法。無論是 UI 事件,網絡回調,還是其他諸如 WebSocket 之類的其他源,任何數據都或多或少的被 dispatch 成 action。 約定俗成,action 應該有一個 `type` 域指明了需要被演算的 action 類型。Type 可以被定義為常數從其他 module 中導入。比起用 [Symbols](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Symbol) 表示 `type` 使用 String 是更好的方法因為 string 是可被串行化的。 除了 `type`之外,action 對象的結構其實完全取決于你自己。如果你感興趣的話,請參考 [Flux Standard Action](https://github.com/acdlite/flux-standard-action) 作為如何組織 actions 的建議。 還有就是請看后面的 [異步 action](#)。 ### Reducer ~~~ type Reducer<S, A> = (state: S, action: A) => S; ~~~ *Reducer* (也叫 *reducing function*) 是一個接受累積運算和一個值,返回新的累積函數的函數。用來把一個集合 reduce 到一個單獨值。 Reducer 并不是 Redux 特有的——它是函數式編程中的一個基本概念。甚至大部分的非函數式語言比如 JavaScript,都有一個內建的 reduce API。在 JavaScript 中的話是 [`Array.prototype.reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce). 在 Redux 中,累計運算的結果是個 state 對象,被累積的值就是 action。Reducer 由上一個 state 和一個 action 計算得到一個新 state。它必須是 *純函數* 也就是由完全相同的輸入會返回完全相同的輸出。它應該是沒有副作用的。這使得一些很棒的功能諸如熱重載和時間旅行成為可能。 Reducer 是 Redux 之中最重要的概念。 *不要在 reducer 中有 API 調用* ### dispatch function ~~~ type BaseDispatch = (a: Action) => Action; type Dispatch = (a: Action | AsyncAction) => any; ~~~ 一個 *dispatching function* (或者簡單點叫 *dispatch function*) 是一個接收一個 action 或者[異步 action](#)的函數,它可以或不可以分發一個或多個 action 到 store。 我們必須搞清 dispatch function 和由沒有 middleware 的 store 實例提供的 base [`dispatch`](#) function 其中的區別。 Base dispatch function *總是* 同步發 action 給 store 的 reducer,以及由 store 返回的上一個 state 計算出新 state。它期望 actions 會是一個準備好被 reducer 消費掉的普通對象。 [ Middleware ](#) 封裝了base dispatch function。它允許了 dispatch function 處理 action 之外的 [異步 action](#)。 middleware 可以被變形,延遲,忽略,以及其他在將 action 或異步 action 傳遞給下一個 middleware 之前作出解釋。獲取更多信息請往后看。 ### Action Creator ~~~ type ActionCreator = (...args: any) => Action | AsyncAction; ~~~ *Action Creator* 很簡單,就是一個創建 action 的函數。別把這兩個概念搞混。Action 是一個信息的負載,而 action 創建者是一個創建 action 的工廠。 調用 action creator 只會生產出 action,但不分發。你需要調用 store 的 [`dispatch`](#) function 才會真正引起變化。有時我們講 *bound action creator* 意味著函數調用 action creator并立即將結果分發給一個特定的 store 實例。 如果 action 創建者需要讀取當前狀態、做出 API 調用、或引起諸如路由變位等副作用,應該返回一個 [異步 action](#) 而不是 action。 ### 異步 Action ~~~ type AsyncAction = any; ~~~ *異步 action* 是一個發給分發函數,但還沒有準備好被 reducer 消費的值。它會在被發往 base [`dispatch()`](#) function 之前,被 [ middleware ](#) 變為一個或一組 action。異步 actions 可以有多個 type,取決于使用的 middleware。通常為 Promise 或者 thunk 之類的異步原生,雖然沒有被馬上傳給 reducer,但是操作一旦完成就會觸發 action 分發。 ### Middleware ~~~ type MiddlewareAPI = { dispatch: Dispatch, getState: () => State }; type Middleware = (api: MiddlewareAPI) => (next: Dispatch) => Dispatch; ~~~ Middleware 是一個高階函數,它將 [dispatch function](#) 組合并返回一個新的 dispatch function。它通常將 [異步 actions](#) 變為 actions。 Middleware 是使用了復合函數的可構建的。它可在 action 日志,表現副作用例如路由,或將異步 API 調用變為一組同步 actions。 請見 [`applyMiddleware(...middlewares)`](#) 獲取有關 middleware 的詳細內容。 ### Store ~~~ type Store = { dispatch: Dispatch; getState: () => State; subscribe: (listener: () => void) => () => void; getReducer: () => Reducer; replaceReducer: (reducer: Reducer) => void; }; ~~~ Store 是一個承載有應用 state tree 的對象。一個 Redux 應用中應當只有一個 Store,因為構建發生于 reducer 級。 - [`dispatch(action)`](#) 是上面描述過的 base dispatch function。 - [`getState()`](#) 返回當前 store 的 state。 - [`subscribe(listener)`](#) 注冊 funtion 用于在 state 改變時調用。 - [`getReducer()`](#) 和 [`replaceReducer(nextReducer)`](#) 可被用于實現熱重載荷代碼分割。通常你用不上他們。 請見完整的 [store API reference](#) 獲取更多細節。 ### Store Creator ~~~ type StoreCreator = (reducer: Reducer, initialState: ?State) => Store; ~~~ Store creator 是一個創建 Redux store 的函數。就像 dispatching function 那樣,我們必須分清由 [`createStore(reducer, initialState)`](#) 從 Redux 包中導出的 base store creator,和從 store enhancer 返回的 store creator。 ### Store enhancer ~~~ type StoreEnhancer = (next: StoreCreator) => StoreCreator; ~~~ Store enhancer 是一個高階函數,將 store creator 組合,返回一個新的強化過的 store creator。這與允許你使用可組合方式變更 store 接口的 middleware 有點相似。 Store enhancer 是與 React 中概念非常相同的高階 component, 通常也會被叫做 “component enhancers”。 因為 store 并非一個實例,而更像是幾個函數的集合普通對象。復制可以被簡單的創建或修改而不需變動原先的 store。在 [`compose`](#) 文檔中有一個示例演示了這種做法。 大多數時候你不可能去寫 store enhancer,但你會用得著 [developer tools](https://github.com/gaearon/redux-devtools) 提供的。它使得app對其發生無察覺的時間旅行變得可能。搞笑的是,[Redux middleware 的實現](#) 本身就是一個 store enhancer。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看