美文网首页
Redux-学习经验

Redux-学习经验

作者: zhulichao | 来源:发表于2020-08-21 09:14 被阅读0次

进行网络请求

发起网络请求的操作通常放在组件的componentDidMount方法中,使用redux进行网络请求就是发起一个action,但这个action比较特殊,它的内部还会发起其它action,形式如下:

import { createStore, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk';
const store = createStore(reducer, initialState, compose(
    applyMiddleware(..., thunk),
    window.devToolsExtension ? window.devToolsExtension() : f => f // 可使用浏览器的Redux DevTools插件进行redux调试
));

  • action文件主要内容
function xxxRequest() {
  return {
    type: REQUEST,
  }
}
function xxxSuccess(data) {
  return {
    type: SUCCESS,
    data: data,
  }
}
function xxxFailure(error) {
  return {
    type: FAILURE,
    error: error,
  }
}
export function xxx(url, objParam) {
  return (dispatch, getState) => {
    dispatch(xxxRequest());
    return fetch(url, {
        method: 'post',
        headers: {
            ...
        },
        body: JSON.stringify(objParam)
    }).then(data => dispatch(xxxSuccess(data)))
      .catch(errors => dispatch(xxxFailure(error)));
  };
}

保证请求按序进行

使用redux-sequence-action中间件

这里说的按序请求,不是指上面的发起一个网络请求时发起的多个action的情况,而是指按序发起多个网络请求、每个网络请求是在上个网络请求完成再执行的情况,比如点击保存先调用save网络请求,再调用refresh网络请求。至于为什么不能直接用dispatch(save),再dispatch(refresh),是因为进行网络请求是异步的,可能在save请求还没完成,就进行了refresh请求并返回了结果,这时的结果是未更新的结果。

  • 安装依赖
npm install --save redux-sequence-action
  • createStore.js中
import sequenceAction from 'redux-sequence-action';
...
const store = createStore(reducer, initialState, compose(
    applyMiddleware(invariant(), thunk, sequenceAction),
    window.devToolsExtension ? window.devToolsExtension() : f => f
));
...
  • containers/下引用的组件中

...
class MyComponent extends Component {
    ...
    componentDidMount() {
        // 发起actionA
        this.props.allActions.actionA('a','b');
        // 发起actionC
        this.props.allActions.actionC('c');
    }
    ...
}

function mapStateToProps(state) {
  return state;
}
function mapDispatchToProps(dispatch) {
  return {
    allActions: {
        ...bindActionCreators({
            actionA,
            actionB,
        }, dispatch),
        // actionC中先发起actionB,actionB结束后再发起actionC
        actionC: (arg1, arg2, arg3) => dispatch([actionA(arg1, arg2), actionB(arg3)]),
    },
  };
}
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);

相关文章

  • Redux-学习经验

    进行网络请求 发起网络请求的操作通常放在组件的componentDidMount方法中,使用redux进行网络请求...

  • 轻松搞定 -react-redux-基本用法

    1. 前言 之前写了几篇关于 redux和react-redux文章,链接如下redux-基础[https://w...

  • Redux-基础

    参考Redux 入门教程(一):基本用法 Redux 入门教程(二):中间件与异步操作 Redux 入门教程(...

  • redux-调试

    参考文档:http://chromecj.com/web-development/2018-03/931.html

  • Redux-概念理解

    一、Action:是把数据传到store的有效载荷,他是store数据的唯一来源。Action本质上是普通的Jav...

  • redux-拆分state

    一个最小的redux实例 合并到成一个新的state 使用

  • React进阶(3)-上手实践Redux-如何更改store中的

    前言 在前面的一文React进阶(2)-上手实践Redux-如何获取store的数据当中,已经知道组件怎么获取st...

  • Redux-的使用总结

    redux核心概念 store: 状态仓库,存放所有状态(很懒,只负责数据存取不负责计算)reducer: 计算者...

  • 学习经验

    首先感谢老师对我们的认可。给我这次机会跟各位家长分享几点经验,一家之言,或许有说的不对的地方,请各位家长姑且听之吧...

  • 学习经验

    新工具 看官方文档,看看有哪些主要的好用功能;英文不好,用有道翻译。 学习知识 看相关的书籍。尽量少看网上短小的文...

网友评论

      本文标题:Redux-学习经验

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