react-redux主要结构
多actions
action具体
reducer
具体reducer
store
代码
一、顶层绑定store
import React from "react"
import ReactDOM from 'react-dom'
import App from './App.js'
import { Provider } from 'react-redux' //将store传递下去
import Store from "./store/index";
ReactDOM.render(
<Provider store={Store}>
<App></App>
</Provider>
,document.getElementById('root'))
说明:
1.Provider 将react-redux数据仓库由顶级组件传递下去
2.Store数据仓库
二、Store数据仓库创建
import {createStore,applyMiddleware} from "redux";
import Immutable from 'immutable';
import thunk from "redux-thunk";
import reducers from "../reducers";
function configStore (){
const initialState = Immutable.Map();
let createStoreWithMiddleware = applyMiddleware(thunk)(createStore);
//dev环境开启redux调试
let store = createStoreWithMiddleware(reducers,initialState,(window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : undefined));
return store;
};
export default configStore();
三、合并所有的reducers导出
// import {combineReducers} from "redux"; //combinReducers用于合并各模块的reducers;
import { combineReducers } from 'redux-immutable';
//import logSlowReducers from 'redux-log-slow-reducers';
import reducer1 from "./reducer1";
import reducer2 from "./reducer2";
export default combineReducers({
reducer1,
reducer2
});
四、导出所有的actions
import {plus,reduce} from "./common";
let actions = {
plus,
reduce
};
export default actions;
五、组件中使用
import React, { Component } from 'react';
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux';
import actions from './actions';
class Count extends Component{
componentDidMount(){
console.log(this.props)
}
render(){
const {initState}=this.props;
const { plus,reduce} = this.props.ACTIONS;
return (
<div className="a">
<h2>当月工资为{initState}</h2>
<button onClick={plus}>升职加薪</button>
<button onClick={reduce}>迟到罚款</button>
</div>
)
}
}
function mapStateToProps(state){
console.log(state)
console.log(state.get())
const state1 = state.get("reducer1")//获取某个reducer
return{
initState:state1.get("num1")//获取对应reducer的数据
}
}
//需要触发什么行为-将dispatch转成props
function mapDispatchToProps(dispatch){
return {
ACTIONS:bindActionCreators(actions,dispatch)//bindActionCreators的作用是将一个或多个action和dispatch组合起来生成mapDispatchToProps需要生成的内容。
}
}
export default connect(mapStateToProps,mapDispatchToProps)(Count)
解读:
1.connect传入两个函数mapStateToProps,mapDispatchToProps将组件和store联系起来
2.mapStateToProps//将state转成props;//获取对应reducer里面的state对象,再获取具体的值
3.页面中使用获取到的state值,需要将值结构出来 const {initState}=this.props;
4.mapDispatchToProps //将dispatch转成props,获取所有的action
5.使用action需要解构出来 const { plus,reduce} = this.props.ACTIONS;
6.bindActionCreators将所有的action组合起来