91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

React手稿之 React-Saga的詳解

發布時間:2020-09-14 13:27:25 來源:腳本之家 閱讀:110 作者:小翼 欄目:web開發

Redux-Saga

redux-saga 是一個用于管理應用程序副作用(例如異步獲取數據,訪問瀏覽器緩存等)的javascript庫,它的目標是讓副作用管理更容易,執行更高效,測試更簡單,處理故障更容易。

redux-saga相當于一個放置在action與reducer中的墊片。

之所以稱之謂副作用呢,就是為了不讓觸發一個action時,立即執行reducer。也就是在action與reducer之間做一個事情,比如異步獲取數據等。

redux-saga使用了ES6中的Generator功能,避免了像redux-thunk的回調地獄。

如何使用

安裝

$ npm install --save redux-saga
//或者
$ yarn add redux-saga

示例

假設有一個UI界面,是根據用戶ID顯示用戶詳情的。那么我們需要通過接口從數據庫根據userId來獲取數據。

簡單起見,我們在本地使用一個json文件來模擬數據庫數據。

{
 "297ee83e-4d15-4eb7-8106-e1e5e212933c": {
  "username": "Saga"
 }
}

創建UI Component

import React from 'react';
import { USER_FETCH_REQUESTED } from '../../../actions/User';

export default class extends React.Component {

 constructor(props) {
  super(props);
  this.state = { userId: '297ee83e-4d15-4eb7-8106-e1e5e212933c' }
 }

 render() {
  const { userInfo = {}, dispatch } = this.props;
  return (
   <React.Fragment>
    <button onClick={() => {
     dispatch({ type: USER_FETCH_REQUESTED, payload: { userId: this.state.userId } });
    }}>Get User Info</button> <span>用戶名: {userInfo.username}</span>
   </React.Fragment>
  );
 }
}

創建saga,這里的saga就相當于action.

import { call, put, takeEvery } from 'redux-saga/effects'
import { fetchUserApi } from '../api/user';
import { USER_FETCH_REQUESTED, USER_FETCH_SUCCEEDED, USER_FETCH_FAILED } from '../actions/User';

function* fetchUser({ payload }) {
 try {
  const user = yield call(fetchUserApi, payload.userId);
  yield put({ type: USER_FETCH_SUCCEEDED, user });
 } catch (e) {
  yield put({ type: USER_FETCH_FAILED, message: e.message });
 }
}

const userSaga = function* () {
 yield takeEvery(USER_FETCH_REQUESTED, fetchUser);
}

export default userSaga;

關于fetchUserApi,我們會在后面的章節中描述。這里僅獲取了json文件中與userId相對應的數據。

把saga放入store中:

import createSagaMiddleware from 'redux-saga';
import Sagas from '../sagas/index';

const sagaMiddleware = createSagaMiddleware()
const store = createStore(
 reducer,
 applyMiddleware(sagaMiddleware)
)
sagaMiddleware.run(Sagas)

最后再實現相就的reducer即可:

import { USER_FETCH_SUCCEEDED } from '../actions/User';

const initialState = { user: {} };

export default (state = initialState, action) => {
 switch (action.type) {
  case USER_FETCH_SUCCEEDED:
   return { ...state, user: action.user };
  default:
   return state;
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山东省| 浦城县| 奉贤区| 乐陵市| 蒙山县| 龙游县| 长子县| 桃园市| 靖安县| 阳高县| 丰顺县| 澜沧| 杭锦旗| 咸阳市| 阳泉市| 稻城县| 洮南市| 吉木萨尔县| 中牟县| 师宗县| 合作市| 罗甸县| 宜君县| 仁怀市| 沐川县| 宁乡县| 新巴尔虎左旗| 大英县| 荆门市| 溧阳市| 兴和县| 微博| 布拖县| 正镶白旗| 广平县| 南郑县| 襄城县| 中西区| 绥宁县| 偏关县| 监利县|