title: 三步使用装饰器添加redux状态管理
date: 2019-09-07 07:25:09
tags: React
categories:

  • 前端

1.在最外边index组件用Provider将所有组件包裹起来,并提供全局唯一的store

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';

import { createStore } from "redux";
import { Provider } from "react-redux";
import {reducer} from "./redux/redux"
const store = createStore(
    reducer,
    window.devToolsExtension?window.devToolsExtension():undefined
)

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

2.reducer本身需要提供的两个方法,reducer和返回各种json对象的actions函数

// actions
export function setState(data){
    return {
        type:"SET_STATE",
        data
    }
}

// reducers
export const reducer = (state = {
    path:"/dataset",
    columns:[],
    data:[]
}, action) => {
    let data = action.data;
    switch (action.type) {
        case 'SET_STATE':
            state.path = data.path
            console.log(data)
            return state
        default:
            return state
    }
}

3.在需要使用redux的组件中这样写

/**
 * layout 侧边栏菜单
 */
@connect(
    state => ({reduxStore:state}),{setState}
)
class index extends Component {
    state = {
        collapsed: false
    };

    onCollapse = collapsed => {

然后调用this.props.reduxStore就可以使用保存在redux中的各种state了,调用action的话,直接调用this.props.action就可以了。

4.需要注意的地方

  • 在reducer方法中一定要返回state,不然无法取到action设置的state

  • 使用装饰器@connect的话就无法导出export default 组件名,只能在组件末尾导出export default 组件名,所以组件必须有一个临时的名字。