Redux的替代方案 React Hooks

眾所周知 ReduxReact 的狀態(tài)管理,但是操作太過繁瑣镜粤,自從Hooks 問世之后抬虽,我們大可以使用新Api useReduce 來進行狀態(tài)管理夏伊。

定義我們初始狀態(tài)

 let defaultData  = {city:'武漢',id:0}//初始化倉庫數(shù)據(jù)

新建一個Reduce函數(shù)

  //Redux for Hooks
  const reducer = (state, action) => {
    switch (action.type) {
      case 'city':
        return {...state,city:state.city==='武漢'?'杭州':'武漢'};
      case 'id':
        return {...state,id:state.id+1};
        default:
          throw new Error();
    }
  }

兩者關(guān)聯(lián)起來

  const [state, dispatch] = useReducer(reducer, defaultData);

下面的步驟為實際開發(fā)中便于管理 可不這樣寫

定義映射函數(shù)

   //useReducer 映射函數(shù)
  const mapDispatch = dispatch => ({
    city: () => dispatch({ type: 'city'}),
    id: () => dispatch({ type:'id' }),
  })

配發(fā)器注入到映射函數(shù)

  const actions = mapDispatch(dispatch)

這樣抹沪,如果我們想讓城市發(fā)生改變

<Button 
 onClick={actions.city}> 
  獲取{state.city==='武漢'?'杭州':'武漢'}的天氣?? 
</Button>    

就結(jié)束了

想讓id自增

<Button 
onClick={actions.id}>ID自增+
</Button>   

是不是方便多了

如果我們想城市一發(fā)生改變后去拿改變后城市的天氣情況?? 我們需要使用useEffect

  //檢測city發(fā)生改變
 useEffect(() => {
   setLoading2(true)
   const getWeather = async ()=>{
        const result = 
        await axios(`https://api.xiaohuwei.cn/weather.php?city=${state.city}`)
        setWeather(result.data)
        setTimeout(() => {
          setLoading2(false);
          message.success(`${state.city}天氣更新成功`);
        }, 1500);
   }
   getWeather();
 }, [state.city])

可以看到 useEffect 第二個參數(shù)這里寫的是 [state.city] 就是代表這個函數(shù)監(jiān)聽的就是城市改變?nèi)缓髨?zhí)行相應(yīng)的邏輯刻肄。如果你想要監(jiān)聽id的變化,那就只需要再申明一個 useEffect 即可融欧,聰明的你肯定會知道第二個參數(shù)為 [state.id]敏弃。


最后附上完整代碼 Reactproject

看一下Demo? Demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末噪馏,一起剝皮案震驚了整個濱河市麦到,隨后出現(xiàn)的幾起案子绿饵,更是在濱河造成了極大的恐慌,老刑警劉巖瓶颠,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拟赊,死亡現(xiàn)場離奇詭異,居然都是意外死亡步清,警方通過查閱死者的電腦和手機要门,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門虏肾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廓啊,“玉大人,你說我怎么就攤上這事封豪∏绰郑” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵吹埠,是天一觀的道長第步。 經(jīng)常有香客問我,道長缘琅,這世上最難降的妖魔是什么粘都? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮刷袍,結(jié)果婚禮上翩隧,老公的妹妹穿的比我還像新娘。我一直安慰自己呻纹,他們只是感情好堆生,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雷酪,像睡著了一般淑仆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哥力,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天蔗怠,我揣著相機與錄音,去河邊找鬼吩跋。 笑死寞射,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的钞澳。 我是一名探鬼主播怠惶,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼轧粟!你這毒婦竟也來了策治?” 一聲冷哼從身側(cè)響起脓魏,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎通惫,沒想到半個月后茂翔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡履腋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年珊燎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遵湖。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悔政,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出延旧,到底是詐尸還是另有隱情谋国,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布迁沫,位于F島的核電站芦瘾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏集畅。R本人自食惡果不足惜近弟,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挺智。 院中可真熱鬧祷愉,春花似錦、人聲如沸逃贝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沐扳。三九已至泥从,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沪摄,已是汗流浹背躯嫉。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杨拐,地道東北人祈餐。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像哄陶,于是被迫代替她去往敵國和親帆阳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容