博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React手稿之 React-Saga
阅读量:6984 次
发布时间:2019-06-27

本文共 2172 字,大约阅读时间需要 7 分钟。

Redux-Saga

redux-saga 是一个用于管理应用程序副作用(例如异步获取数据,访问浏览器缓存等)的javascript库,它的目标是让副作用管理更容易,执行更高效,测试更简单,处理故障更容易。

redux-saga相当于一个放置在actionreducer中的垫片。

之所以称之谓副作用呢,就是为了不让触发一个action时,立即执行reducer。也就是在actionreducer之间做一个事情,比如异步获取数据等。

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 (      
用户名: {userInfo.username}
); }}

创建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;  }}

推荐阅读

转载地址:http://uotpl.baihongyu.com/

你可能感兴趣的文章
C# 温故知新 基础篇(7) 接口<思维导图>
查看>>
jQuery Makes Parsing XML Easy[转]
查看>>
CSS里常见的块级元素和行内元素
查看>>
Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
查看>>
framework调试
查看>>
java线程(2)--同步和锁
查看>>
Rafy 框架 - 大批量导入实体
查看>>
go1
查看>>
使用 Palette 让你的 UI 色彩与内容更贴合
查看>>
关于ASP.NET"未能映射路径"问题
查看>>
详谈如何定制自己的博客园皮肤
查看>>
iBATIS配置文件的特殊使用方法
查看>>
Python正则表达式指南
查看>>
T-SQL 根据年月日创建DateTime
查看>>
【CSS进阶】CSS 颜色体系详解
查看>>
论:CMMI项目策划方法(PP)
查看>>
高可用高性能分布式文件系统FastDFS实践Java程序
查看>>
【Coursera课程笔记】Web智能和大数据Week3_MapReduce
查看>>
从头写个http client(java)
查看>>
Windows Phone笔记索引(总)
查看>>