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 组件名,所以组件必须有一个临时的名字。

哥一嗷,giao~