加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

redux-saga HellWorld入门 异步计数器(react-redux)

发布时间:2020-12-15 06:47:42 所属栏目:百科 来源:网络整理
导读:点击加减按钮,延迟1秒操作加减动作(模拟异步网络请求) 最终调用Action “Done” 将结果展示 import React from 'react' import ReactDOM from 'react-dom' import {createStore,applyMiddleware} from 'redux' import {Provider,connect} from 'react-red

点击加减按钮,延迟1秒操作加减动作(模拟异步网络请求)
最终调用Action “Done” 将结果展示

import React from 'react'
import ReactDOM from 'react-dom'
import {createStore,applyMiddleware} from 'redux'
import {Provider,connect} from 'react-redux'
import createSagaMiddleware,{takeEvery} from 'redux-saga'


import {put,fork} from 'redux-saga/effects'
function reducers(state=0,action) {
    switch (action.type) {
        case 'Done':
            return state + action.payload;
        default:
            return state;
    }
};


export function* AddAsync() {
    yield new Promise(function (resolve) {
        setTimeout(function () {
            resolve()
        },1000)
    })
    yield put({type: 'Done',payload: 1})
}

export function* SubAsync() {
    yield new Promise(function (resolve) {
        setTimeout(function () {
            resolve()
        },payload: -1})
}

function* watchIncrementAsync() {
    yield* takeEvery('ADD',AddAsync)
}

function* watchDecrementAsync() {
    yield* takeEvery('SUB',SubAsync)
}

var sagaMiddleware = createSagaMiddleware();
const store = createStore(reducers,applyMiddleware(sagaMiddleware))
function* root() {
    yield [
        fork(watchDecrementAsync),fork(watchIncrementAsync)
    ]
}

sagaMiddleware.run(root)

const ResultIn = (props) => <div>结果:{props.value}</div>

const Result = connect(
    mapStateToPropsResult
)(ResultIn)

var AppIn = (props) => <div>

    <span onClick={() => {
        props.onChangeAdd()
    }}>点我加1</span>

    <span onClick={() => {
        props.onChangeSub()
    }}>点我减1</span>


    <Result/></div>

function mapStateToPropsResult(state) {
    return {
        value: state
    }
}

function mapStateToProps(state) {
    return {
        value: state
    }
}

function mapDispatchToProps(dispatch) {
    return {
        onChangeAdd: () => {

            dispatch({type: 'ADD',payload: 1});
        },onChangeSub: () => {
            dispatch({type: 'SUB',payload: 1});
        }
    }
}

const App = connect(
    mapStateToProps,mapDispatchToProps
)(AppIn)

ReactDOM.render(
    <Provider store={store}>
        <App/>
    </Provider>,document.getElementById('root')
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读