美文网首页
redux-sagas的学习

redux-sagas的学习

作者: 都江堰古巨基 | 来源:发表于2020-03-13 10:43 被阅读0次

redux-sagas个人的理解应该就是一个中间件,在执行dispatch之前执行的钩子函数,我们可以这样使用它,在一个功能中dispatch主要用于更改UI的值,但这个值需要去某个api获取,所以我们需要先获取到这个值,然后再进行更改,redux-sagas就用于获取这个值的过程。
项目的整体结构如下:


项目结构.png

在引入redux之后的store文件夹下面新建sagas:

import { takeEvery, put } from "redux-saga/effects";
// 触发saga的actionType
import { REDUX_SAGAS } from "./actionType";
// 请求完API之后的流程
import { reduxSuccess } from "./actionCreatores";
import axios from "axios";

function* mySaga() {
    yield takeEvery(REDUX_SAGAS,t_sagas)
}

function* t_sagas() {
    console.log('测试redux-saga!!!')
    yield axios.get('http://ghhmzjd.tillage-cloud.com:8002/pangu/datacenter/dataCenter/intelligentScenic/crowd')
    const action = reduxSuccess()
    // 这里相当于store.dispatch(action)
    yield put(action)
}
export default mySaga;

actionCreatores.js:

import { 
    REDUX_SAGAS,
    REDUX_SAGAS_SUCC
} from "./actionType";

export const reduxSagas = (data) => ({
    type: REDUX_SAGAS,
    data
})

export const reduxSuccess = () => ({
    type: REDUX_SAGAS_SUCC,
})

actionType.js:

// sagas
export const REDUX_SAGAS = 'reduxSagas'
export const REDUX_SAGAS_SUCC = 'reduxSagasSucc'

reducer.js

import { 
  REDUX_SAGAS,
  REDUX_SAGAS_SUCC 
} from "./actionType";

const defaultState = {
    reduxSagas: "",
    flag: "等待执行redux-saga"
}
export default (state = defaultState, action) => {
    if (action.type === REDUX_SAGAS) {
        let newState = JSON.parse(JSON.stringify(state))
        newState.reduxSagas = action.data
        return newState
    }
    if (action.type === REDUX_SAGAS_SUCC) {
        let newState = JSON.parse(JSON.stringify(state))
        newState.flag = 'success'
        return newState
    }
    return state
}

sagas.js:

import { createStore , applyMiddleware ,compose } from "redux";
import reducer from "./reducer";
import createSagaMiddleware from "redux-saga";
// 引入saga的业务逻辑
import mySagas from "./sagas";

const sagaMiddleware = createSagaMiddleware();
const composeEnhancers =   window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?
    window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({}):compose;

const enhancer = composeEnhancers(applyMiddleware(sagaMiddleware))
const store = createStore(
    reducer,
    enhancer
)
sagaMiddleware.run(mySagas)
export default store

最后是我们的视图层 app.js:

import React, { Component, Fragment} from 'react';
import 'antd/dist/antd.css'
import { Button, Card, Statistic } from "antd";
// redux
import store from "./store";
// redux的枚举
import { statelessValue , reduxSagas} from "./store/actionCreatores";

class App extends Component {
  constructor(props) {
    super(props);
    this.state = { 
      ...store.getState()
    }
    this.storeChange = this.storeChange.bind(this)
    store.subscribe(this.storeChange)  // 订阅redux的状态
  }

  storeChange() {
    this.setState(store.getState())
  }

  testReduxSagas () {
    const action = reduxSagas()
    store.dispatch(action)
  }

  render() { 
    return ( 
      <Fragment>
        <Button type="primary" onClick={this.testReduxSagas.bind(this)}>redux-sagas</Button>
        <div>{this.state.flag}</div>
      </Fragment>
    );
  }
  
}
 
export default App;

在视图上点击了按钮之后在saga中间件中发起请求,最后请求成功,更新flag,视图最后渲染新的flag。

相关文章

  • redux-sagas的学习

    redux-sagas个人的理解应该就是一个中间件,在执行dispatch之前执行的钩子函数,我们可以这样使用它,...

  • 关于队列的生活实例-redux-sagas异步操作(1)

    讲在redux-sagas异步操作之前,算是铺垫。举个银行的排队例子。 看了很多的队列实例,都没举个简单例子。 其...

  • redux-sagas异步操作(2)-以ireading app

    ireading是一个比较好的微信精选的app,里面用到了redux-sagas组件。我们就来看看怎么使用这个组件...

  • 学习的学习

    “三分钟的热情相信大家都有,但是能够重复思考一个概念,一个知识点,并把它吃透掌握才是大部分人稀缺的能力。”李笑来老...

  • 学习的学习

    不只是学习,听完是不够的。 还要把学到的东西变成方法论、清单式的条目出来去刻意练习。去用,去不断的实践。 有个词 ...

  • 学习的真相|学习「学习」再学习

    不知不觉间,笑来老师在“好的家庭教育”讲的新课《学习的真相》,已经更新到了第12课,关于“学习的真相”这门课,我认...

  • 元学习——关于学习的学习

    元学习是一门关于如何学习的课程。 首先理清几个概念 1、学习是拼图 学习并不是线性的,相反学习是一张信息拼图,类似...

  • 学习,就是学习学习的态度!

    学习,从来都需要态度! 没有了态度,你来了,也不过是躯体入场,思想游荡! 那就学习学习的态度喽!

  • 学习学习再学习的成长

    女儿快要中考了,随着时间的临近,中考紧张气氛越来越浓。成绩一直不太理想的她,也有了紧迫感,不时表露出来“书到用时方...

  • 学习,学习的方法

    学习一门学科首先掌握这个领域的一些基础理论和概念 然后学习一些高级的组合框架,这些框架是一些能够解决这个领域通用问...

网友评论

      本文标题:redux-sagas的学习

      本文链接:https://www.haomeiwen.com/subject/eeofshtx.html