<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

          共 1816字,需瀏覽 4分鐘

           ·

          2021-01-08 08:28

          (????)??嗨,我是你穩(wěn)定更新、干貨賊多的勾勾。



          Redux 官方對(duì)它的定義是 JavaScript 應(yīng)用程序的可預(yù)測(cè)狀態(tài)容器。也就是說(shuō),我們?cè)诮o一個(gè)值的時(shí)候,對(duì)于這個(gè)值的結(jié)果是可預(yù)測(cè)的。


          Redux 提供了一個(gè)特有的 api 叫 createStore()。從字面意思就能感受到,這是一個(gè)創(chuàng)建 store 的方法。


          對(duì)于 store ,它有四個(gè)重點(diǎn)知識(shí):


          • State 是 store 中的狀態(tài)值,這個(gè)值只能通過(guò) getState() 獲取到

          • getState 專門用于獲取 state 的方法

          • Dispatch 用來(lái)派發(fā)修改 state 的方法

          • Subscribe 用來(lái)訂閱了狀態(tài)的的方法


          接下來(lái)我們使用圖形的形式來(lái)解析這個(gè)過(guò)程。



          簡(jiǎn)單梳理下 redux 工作流程。


          view 層通過(guò) dispatch 提交一個(gè) action ,然后在 reducers 中找到與 action 匹配成功的 reducer,通過(guò) reducer 去修改 store 中的狀態(tài),然后把修改后的結(jié)果通過(guò) subscribe 去修改 view 層。


          這簡(jiǎn)單的幾句話概述了 redux 的幾個(gè)特點(diǎn):


          • Redux 是單向數(shù)據(jù)流

          • Redux 扮演一個(gè)中間件的角色


            有了這些認(rèn)識(shí),咱們來(lái)看看那再熟悉不過(guò)的計(jì)數(shù)器 demo。

            import React,{ useState,useEffect } from "react"import {createStore } from "redux"------- 第一步let reducers = (state=0,action)=>{    switch (action.type) {        case "increment":          return state + 1;        case "decrement":          return state - 1;        default:          return state;      }}------第二步let store = createStore(reducers)------第三步let add = () => {  store.dispatch({    type:"increment"  })}let minus = () => {  store.dispatch({    type:"decrement"  })}function App(props){-----第四步    const [count,setCount] = useState({num:0})    useEffect(()=>{      store.subscribe(()=>{        setCount({num:store.getState()})      })    })         return (      <div>        hello world        <h3>{count.num}h3>        <button onClick={()=>{add()}}>增加button><br/><br/>                <button onClick={()=>{minus()}}>減去button>      div>    )  }export default App


            看了上面的計(jì)數(shù)器 demo。有幾點(diǎn)勾勾要強(qiáng)調(diào)一下,畢竟用了別人的東西,里面的規(guī)矩還是得需要了解的。


            1. Reducer 的定義必須攜帶兩個(gè)必要參數(shù),分別是 state 和修改 state 的 action

            1. Action 的派發(fā)必須要 dispatch 派發(fā)

            1. 對(duì)于視圖層要通過(guò) subscribe 訂閱狀態(tài),一旦狀態(tài)發(fā)生改變就會(huì)更改視圖層


            以上,學(xué)廢了嗎?


            推薦閱讀:

            技術(shù)人年度總結(jié) | 2020,注定不平凡

            2020 最后一篇技術(shù)文:可愛(ài)的烏咪 UmiJS

            如何設(shè)計(jì)路由權(quán)限?

            探索加密解密的世界

            是我 Web 端配不上阿里了。

            給 React 穿上美麗的‘嫁衣’

            不可避免的問(wèn)題:React 的路由如何抽離?

            API 終結(jié)者 —— 殺手 Reflect

            前端人因?yàn)?Vue3 的 Ref-sugar 提案打起來(lái)了!


            點(diǎn)點(diǎn)“”和“在看”,保護(hù)頭發(fā),減少bug。

            瀏覽 68
            點(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手机天堂网 | 亚洲精品一二三四区 | 18禁在线亚洲 | 九九精品免费视频 |