iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
1
Modern Web

React 30天系列 第 17

Day 17-redux middleware(使用redux-promise處理非同步資料吧)

前情提要:昨天實作了HOC的小練習withLoading,我們透過api取得資料,但這過程中沒有使用redux處理,如果要透過redux處理非同步資料的話,又會是什麼過程呢?今天就來看看怎麼用redux處理非同步資料吧。

從發送action後,到執行reducer前,我們可以加一層Middleware幫助我們擴充Redux。
而Middleware最常見的使用方式就是實現非同步action,接下來就讓我們透過redux-promise認識如何使用Middleware吧!

關於middleware如何實現的可參考Middleware

redux-promise

安裝redux-promise

npm install --save redux-promise

要使用middleware的話,首先我們需要調整store,匯入applyMiddleware method

import { createStore, applyMiddleware } from 'redux';
import reduxPromise from 'redux-promise';
import rootReducer from '../reducers';

const createStoreWithMiddleware = applyMiddleware(reduxPromise)(createStore);
const store = createStoreWithMiddleware(rootReducer);

export default store;

接著在action creators執行我們的request,這邊使用News API抓取新聞資料

export const fetchNews = () => {
  const request = axios.get(URL)
  return {
    type: FETCH_NEWS,
    payload: request
  }
}

經過處理後,在reducer action就能取得回傳的data
https://ithelp.ithome.com.tw/upload/images/20181024/201115951mvYoBTSAe.png

若為error則收到action.error為true的訊息
https://ithelp.ithome.com.tw/upload/images/20181024/20111595hn2ZPodGKd.png


今日總結:
今天在選擇處理非同步的Middleware花了一些時間(又選擇障礙...),下面這些都是redux提供的建議,時間過短無法每個好好了解和整理不同middleware的特性,最後還是選了簡易又好處理的redux-promise,之後再來找個時間好好研究吧!QAQ

參考資料:

太慘了今天,實作之餘沒有好好紀錄,每個概念都跟拔絲地瓜一樣越拉越深,以為了解了卻又發現沒這麼簡單,越來越艱困了啊,繼續加油!


上一篇
Day 16-[番外]HOC簡易實例
下一篇
Day 18-回顧Redux
系列文
React 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言