<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何看懂 redux 原理

          共 1609字,需瀏覽 4分鐘

           ·

          2021-02-26 06:25

          如何看懂 redux 原理

          • 我們想想怎么創(chuàng)建一個(gè) store

          • 這個(gè) store 支持我們做什么

          • 獲取 store 里面的數(shù)據(jù)狀態(tài)

          • 可以更新 store 里面的數(shù)據(jù)狀態(tài)

          • 通過什么樣的方式更新 store 里面數(shù)據(jù)狀態(tài)

          • 外部如何知道數(shù)據(jù)已經(jīng)更新,通過訂閱的方式

          通過以上的步驟,我們可以畫出以下的流程圖,或者原理圖:

          那么我們就可以來實(shí)現(xiàn)代碼了:

          import?{?createStore?}?from?'redux';

          //??我們想想怎么創(chuàng)建一個(gè)?store
          //?這個(gè)?store?支持我們做什么
          //?1.?獲取?store?里面的數(shù)據(jù)狀態(tài)
          //?2.?可以更新?store?里面的數(shù)據(jù)狀態(tài)
          //?3.?通過什么樣的方式更新?store?里面數(shù)據(jù)狀態(tài)

          //?store?里面?state?數(shù)據(jù)
          let?state?=?{
          ??num:?10
          }

          //?需要通過什么樣的操作類型
          let?action1?=?{
          ??type:?'ADD_ONE',
          ??num:?1
          }

          let?action2?=?{
          ??type:?'SQUARE',
          }

          let?action3?=?{
          ??type:?'ADD_TWO',
          ??num:?2
          }

          //?因?yàn)槲覀儫o法直接修改或者覆蓋?store?數(shù)據(jù)狀態(tài),只能重新返回新的狀態(tài)
          //?所以需要?reducer?來幫助我們做這些事情

          let?reducer?=?(state?=?{num:?2},?action)?=>?{
          ??let?num
          ??switch(action.type)?{
          ????case?"ADD_ONE":
          ??????num?=?state.num?+?action.num
          ??????return?{?num?}
          ????case?"ADD_TWO":
          ??????num?=?state.num?+?action.num
          ??????return?{?num?}
          ????case?"SQUARE":
          ??????num?=?state.num?*?state.num
          ??????return?{?num?}
          ????default:
          ??????return?state
          ??}
          }

          //?然后使用?createStore?來連接?reducer

          let?store?=?createStore(reducer)

          //?外部如果獲取?store?里面的?state

          console.log("store.getState",store.getState())

          //?然后外部如何更新內(nèi)部的值呢
          //?只能通過?dispatch?的方式更新

          console.log("store.dispatch(action1)",?store.dispatch({type:?"ADD_ONE"}))

          console.log("store===>",?store)

          //?如果有多個(gè) reducer 怎么辦呢?
          //?redux?給我們提供了?combineReducers({reducer})

          那么外部 視圖層如何知道 store 里面的 state 是被更新過了呢?

          redux 采用了訂閱的方式

          //?那么外部是如何知道?store?里面的?state?被更新過了呢
          //?redux?采用?訂閱的方式
          store.subscribe(function(){
          ??console.log("我被更新了")
          })

          //?如果有多個(gè) reducer 怎么辦呢?
          //?redux?給我們提供了?combineReducers({reducer})

          //?如果有中間件如何處理呢
          //?redux?提供了?applyMiddleware(中間件)



          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产一区免费 | 太湾黄色一级网 | 亚洲日韩Av无码中文字幕美国 | 嫩草影院成人 | 久久香蕉电影 |