[Day14] React Native - Redux Saga

Create Action

在建立 Saga 之前,我们要先建立对应的 action ,以前一篇 EDIT_USERNAME 为例,当我们发出一个任务後,就会有 SUCCESSERROR。如此一来就会有三个 actionType :

  1. EDIT_USERNAME
  2. EDIT_USERNAME_SUCCESS
  3. EDIT_USERNAME_ERROR

再来建立一个变更 username 的 action

const export editUsernameAction = payload => ({
  type: 'EDIT_USERNAME',
  payload
});

Create Saga

要建立一个 Saga Function 要使用 general function ,如下:

api

export function editUserApi (payload) {
    return fetch('http://api.com/path/user', {
        method: 'PUT',
        body: JSON.stringfy(payload)
    });
}
// 定义成功的 Action
const editSuccessAction = payload => ({
  type: 'EDIT_USERNAME_SUCCESS',
  payload,
});

// 定义失败的 Action
const editErrorAction = payload => ({
  type: 'EDIT_USERNAME_ERROR',
  payload,
})


export function* editUsernameSaga ({ payload }) {
    try {
        // 发一个 api 请求
        const data = yield call(editUserApi, payload);
        
        const nextAction = data.success
          ? editSuccessAction
          : editErrorAction;
          
        yield put(nextAction(payload));
    } catch(error) {
        yield put(editErrorAction(error));
    }
}

建立好 Saga 之後,要监听 Saga,在 ~/src/sagas/watcher.js 加入:

import { editUsernameSaga } from './userSagas';

function* watchEditUsernameSaga() {
  yield takeLatest("EDIT_USERNAME", editUsernameSaga);
}

export default watchEditUsernameSaga;

将 Saga 加入 middlewares

import { createStore, applyMiddleware, compose } from 'redux';
import createSagaMiddleware from 'redux-saga';

const configureStore = () => {
    const sagaMiddleware = createSagaMiddleware({});
    
    const middlewares = [ sagaMiddleware ]; // 这边弄成一个阵列可以随时扩充
        
    const store = createStore(
        rootReducer,
        compose(applyMiddleware(...middlewares))
    );
    
    return store;
}

const store = configureStore();

export default store;

<<:  Day 29 | SQLite资料库(四)

>>:  Day 15 - PHP SDK: 用 Pure PHP 建立购物网 (下)

战略管理(strategic management)

我在这篇文章中介绍战略管理。我的书《有效的CISSP:安全和风险管理》中有详细信息。 政策(Poli...

D28: 工程师太师了: 第14.5话

工程师太师了: 第14.5话 杂记: 伫列(queue)是一种利用FIFO(First In Fir...

Day11:伸缩自如的

在我们定义method时,若需要有外来的数值input进来运算,就会定义parameter: int...

[Day 19 - React] 现在开始用框架写网页 — React

为什麽要使用框架? 前端最重要的工作,就是让网页的资料与状态视觉化,有资料状态改变时,就要更动网页内...

[Day 18]所以我说那个酱汁呢(後端篇)

挑战目标: MockNative Camp 这次的挑战应该就止步於此了,虽然後端是自己熟悉的部分,但...