react使用总结五:react-redux合并多个Reducer

1.Reducer1(themeColor.js)

// reducer 优化后================
// 建议使用这中结构

// 1.定义默认数据
let initialState = {
    themeColor: red
}

// 2.Reducer
const themeReducer = (state = initialState, action) => {
    switch (action.type) {
      case CHANGE_COLOR:
        return { ...state, themeColor: action.themeColor }
      default:
        return state
    }
}
// 3.导出
export default themeReducer;

2.Reducer2(aa.js)

// reducer 优化后================
// 建议使用这中结构

// 1.定义默认数据
let initialState = {
    aa:99999
}

// 2.Reducer
const aaReducer = (state = initialState, action) => {
    switch (action.type) {
      case CHANGE_AA:
        return { ...state, aa: action.aa }
      default:
        return state
    }
}
// 3.导出
export default aaReducer;

3.index.js(合并Reducer)

import {combineReducers} from redux;

import themeColorReduce from ./themeColor.js;
import aaReducer from ./aa.js;

const appReducer = combineReducers({
    themeColorReduce,
    aaReducer,
});
export default appReducer;

4.router.js 使用合并后的那个Reducer

import React from "react";
import {BrowserRouter as Router,Route,Redirect,Switch} from react-router-dom;


// 1.引入组件
import App from ./pages/App/app.js;
import Index from ./pages/Index/index.js;
import Page1 from ./pages/Page1/page1.js;
import Page2 from ./pages/Page2/page2.js;
import Page3 from ./pages/Page3/page3.js;


// react-redux
// import createStore from ./store/store.js;
// import {Provider} from ./react-redux.js;
import { createStore } from redux
import { Provider } from react-redux
import appReducer from ./store/index.js;
// 使用合并后的那个Reducer
const store = createStore(appReducer);


// 2.构建路由
const Routes = (
	<Router>
		{/*react-redux*/}
		<Provider store={store}>
			<App>
				<Switch>
					<Route path="/index" component={Index}></Route>
					<Route path = "/page1" component = {Page1}></Route>
	 				<Route path = "/page2" component = {Page2}></Route>
	 				<Route path = "/page3" component = {Page3}></Route>
					<Redirect from="/" to="/index"/> {/*重定向*/}
				</Switch>
			</App>
		</Provider>
	</Router>
)

export default Routes;

5.page1.js 使用

import React, { Component } from react;
import {Router,Route,browserHistory} from react-router-dom;
import { Button } from antd-mobile;
// 1.引入PropTypes
import PropTypes from prop-types;

// 2.引入react-redux
import { connect } from react-redux;


import {IntervalEnhance} from ../../IntervalEnhance;


class Page1 extends Component {
	// 3.定义静态propTypes
	static propTypes = {
	    store: PropTypes.object
	}

	componentWillMount(){
		 // this.alertFn();
		// this.state.alertFn()
		// 
		console.log(this.props)
	}


	render() {
	    return (
	      <div className="page1">
	        这是page1
	        <br/>
	        themeColor:{ this.props.themeColor }
	        <br/>
	        <Button type="primary">{this.props.a}</Button>
	        <br/>
	        {/*<input onBlur={this.props.alertFn}/>	*/}
	      </div>
	    );
  	}

}

// 4.定义mapStateToProps
const mapStateToProps = (state) => {
	  return {
	    themeColor: state.mapStateToProps.themeColor
	  }
}
// 5.connect
Page1 = connect(mapStateToProps)(Page1)


export default Page1;
// export default IntervalEnhance(Page1);

注意:使用这里mapStateToProps中是state.themeColorReduce.themeColor而不是state.themeColor。!!!

经验分享 程序员 微信小程序 职场和发展