redux的简单理解和使用

2019-04-22  本文已影响0人  樊小勇

一、redux简介

rekit脚手架里

导入redux相关的,
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import * as actions from './redux/actions';
把redux里所有的actions导入到actions里



/* 把redux里的state放入props */
function mapStateToProps(state) {
  return {
    denglu: state.denglu,
  };
}

// 把所有的action放入props
function mapDispatchToProps(dispatch) {
  return {
    actions: bindActionCreators({ ...actions }, dispatch)
  };
}
// 导出
export default connect(
  mapStateToProps,
  mapDispatchToProps
)(DefaultPage);

然后开始配置redux以及action

const initialState = {
  isLogin:false,
  userName:''
};

export default initialState;

export function changeLoginState(payload) {
  return {
    type: DENGLU_CHANGE_LOGIN_STATE,
    payload
  };
}
import {
  DENGLU_CHANGE_LOGIN_STATE,
} from './constants';
// payload 传来的参数
export function changeLoginState(payload) {
  return {
    type: DENGLU_CHANGE_LOGIN_STATE,
    payload
// 参数引进来
  };
}
/**
 * reducer,用来修改state的值
 * state是全局的state,包含了所有模块设置的state
 * action是所有模块派发的action,这里都能收到
 */
export function reducer(state, action) {
  switch (action.type) {
    case DENGLU_CHANGE_LOGIN_STATE:
      return {
        ...state,
        isLogin:action.payload
// action.type选中当前的action,而参数对应的就是action.payload
      };

    default:
      return state;
  }
}
// 登陆成功后,修改isLogin的值(派发action)
    this.props.actions.changeLoginState(true);
    // 用户名
    let name = res.user.username;
    this.props.actions.changeUsername(name);
导入
import * as loginActions from '../login/redux/actions'
使用
/* istanbul ignore next */
function mapStateToProps(state) {
  return {
    me: state.me,
    isLogin: state.login.isLogin,
    username: state.login.username
// 变量名称需要对应
  };
}

/* istanbul ignore next */
function mapDispatchToProps(dispatch) {
  return {
    actions: bindActionCreators({ ...actions,...loginActions }, dispatch)
  };
}

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(Me);

组件使用
因为这些步骤之后,redux里的状态变量已经放在props里我们可以直接通过props访问到该变量
然后条件渲染来使用

二、图解

上一篇下一篇

猜你喜欢

热点阅读