最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React手稿之 React-Saga的詳解

 更新時(shí)間:2018年11月12日 15:28:20   作者:小翼  
這篇文章主要介紹了React手稿之 React-Saga的詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Redux-Saga

redux-saga 是一個(gè)用于管理應(yīng)用程序副作用(例如異步獲取數(shù)據(jù),訪(fǎng)問(wèn)瀏覽器緩存等)的javascript庫(kù),它的目標(biāo)是讓副作用管理更容易,執(zhí)行更高效,測(cè)試更簡(jiǎn)單,處理故障更容易。

redux-saga相當(dāng)于一個(gè)放置在action與reducer中的墊片。

之所以稱(chēng)之謂副作用呢,就是為了不讓觸發(fā)一個(gè)action時(shí),立即執(zhí)行reducer。也就是在action與reducer之間做一個(gè)事情,比如異步獲取數(shù)據(jù)等。

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

如何使用

安裝

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

示例

假設(shè)有一個(gè)UI界面,是根據(jù)用戶(hù)ID顯示用戶(hù)詳情的。那么我們需要通過(guò)接口從數(shù)據(jù)庫(kù)根據(jù)userId來(lái)獲取數(shù)據(jù)。

簡(jiǎn)單起見(jiàn),我們?cè)诒镜厥褂靡粋€(gè)json文件來(lái)模擬數(shù)據(jù)庫(kù)數(shù)據(jù)。

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

創(chuàng)建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>用戶(hù)名: {userInfo.username}</span>
   </React.Fragment>
  );
 }
}

創(chuàng)建saga,這里的saga就相當(dāng)于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;

關(guān)于fetchUserApi,我們會(huì)在后面的章節(jié)中描述。這里僅獲取了json文件中與userId相對(duì)應(yīng)的數(shù)據(jù)。

把saga放入store中:

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

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

最后再實(shí)現(xiàn)相就的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;
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React重新渲染超詳細(xì)講解

    React重新渲染超詳細(xì)講解

    什么是re-render(重新渲染)?哪些是必要的re-render?哪些是非必要的re-render?如果你對(duì)這些問(wèn)題還不是很明白,那么可以在這篇文章中找到答案
    2022-11-11
  • React 錯(cuò)誤邊界組件的處理

    React 錯(cuò)誤邊界組件的處理

    這篇文章主要介紹了React 錯(cuò)誤邊界組件的處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • React組件學(xué)習(xí)之Hooks使用

    React組件學(xué)習(xí)之Hooks使用

    這篇文章主要介紹了React hooks組件通信,在開(kāi)發(fā)中組件通信是React中的一個(gè)重要的知識(shí)點(diǎn),本文通過(guò)實(shí)例代碼給大家講解react hooks中常用的父子、跨組件通信的方法,需要的朋友可以參考下
    2022-08-08
  • React.js入門(mén)學(xué)習(xí)第一篇

    React.js入門(mén)學(xué)習(xí)第一篇

    這篇文章主要為大家介紹了React.js入門(mén)學(xué)習(xí)第一篇,詳細(xì)解析React.js基礎(chǔ)知識(shí),全方位的了解React.js,感興趣的小伙伴們可以參考一下
    2016-03-03
  • react如何修改循環(huán)數(shù)組對(duì)象的數(shù)據(jù)

    react如何修改循環(huán)數(shù)組對(duì)象的數(shù)據(jù)

    這篇文章主要介紹了react如何修改循環(huán)數(shù)組對(duì)象的數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • React項(xiàng)目中className運(yùn)用及問(wèn)題解決

    React項(xiàng)目中className運(yùn)用及問(wèn)題解決

    這篇文章主要為大家介紹了React項(xiàng)目中className運(yùn)用及問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 詳解操作虛擬dom模擬react視圖渲染

    詳解操作虛擬dom模擬react視圖渲染

    這篇文章主要介紹了詳解操作虛擬dom模擬react視圖渲染,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • react中使用video.js的踩坑記錄

    react中使用video.js的踩坑記錄

    這篇文章主要介紹了react中使用video.js的踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 詳解如何優(yōu)雅地在React項(xiàng)目中使用Redux

    詳解如何優(yōu)雅地在React項(xiàng)目中使用Redux

    這篇文章主要介紹了詳解如何優(yōu)雅地在React項(xiàng)目中使用Redux,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • React?數(shù)據(jù)共享useContext的實(shí)現(xiàn)

    React?數(shù)據(jù)共享useContext的實(shí)現(xiàn)

    本文主要介紹了React?數(shù)據(jù)共享useContext的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論

长岭县| 呼和浩特市| 杂多县| 崇州市| 纳雍县| 进贤县| 铜鼓县| 淮安市| 阿克苏市| 巍山| 宜兰县| 靖西县| 新民市| 自治县| 菏泽市| 涿州市| 老河口市| 鄂伦春自治旗| 观塘区| 南丹县| 顺平县| 安阳县| 横山县| 阿城市| 丹江口市| 库车县| 龙岩市| 旬邑县| 东至县| 桑日县| 怀安县| 玉环县| 台山市| 普定县| 石河子市| 方正县| 遂平县| 长宁县| 靖边县| 类乌齐县| 嵊泗县|