redux react使用

1.在src中新建redux文件夹

2.npm下载redux和react-redux库

 

import { createStore } from 'redux';
import { Provider, connect } from 'react-redux';

使用this.props获取传人数据

 

 

render() {
    const {text, onChangeText, onButtonClick} = this.props;
    return (
        <div>
            <h1 onClick={onChangeText}> {text} </h1>
            <button onClick={onButtonClick}>click me</button>
        </div>
    );
}

3.reducer.js给action去执行的方法来修改状态

 

 

//reducer
const initialState = {
    text: 'Hello'
}
export const reducer = (state = initialState, action) => {
    switch (action.type){
        case 'CHANGE_TEXT':
            return{
                text:state.text == 'Hello' ? 'World' : 'Hello'
            }
        case 'BUTTON_CLICK':
            return{
                text: 'Hello world'
            }
        default:
            return initialState
    }
}

4.action.js关联reducer到属性

 

 

const changeTextAction = {
    type: 'CHANGE_TEXT'
}
const buttonClickAction = {
    type: 'BUTTON_CLICK'
}


//映射Redux state到组件的属性
export const mapStateToProps = (state) => {
    return {
        text: state.text
    }
}

//映射Redux actions到组件的属性
export const mapDispatchToProps = (dispatch) => {
    return{
        onButtonClick:()=>dispatch(buttonClickAction),
        onChangeTextClick:()=>dispatch(buttonClickAction),
    }
}

5.将reducer注入到属性,也可用在组件引入

 

 

let store = createStore(reducer);
render(
    <Provider store={store}>
        <Index/>
    </Provider>,
    document.getElementById('root')
);

 

 

 

完整代码

reducer.js

 

//reducer
const initialState = {
    text: 'Hello'
}
export const reducer = (state = initialState, action) => {
    switch (action.type){
        case 'CHANGE_TEXT':
            return{
                text:state.text == 'Hello' ? 'World' : 'Hello'
            }
        case 'BUTTON_CLICK':
            return{
                text: 'Hello world'
            }
        default:
            return initialState
    }
}

 

action.js

 

const changeTextAction = {
    type: 'CHANGE_TEXT'
}
const buttonClickAction = {
    type: 'BUTTON_CLICK'
}


//映射Redux state到组件的属性
export const mapStateToProps = (state) => {
    return {
        text: state.text
    }
}

//映射Redux actions到组件的属性
export const mapDispatchToProps = (dispatch) => {
    return{
        onButtonClick:()=>dispatch(buttonClickAction),
        onChangeTextClick:()=>dispatch(buttonClickAction),
    }
}

index.js(入口注入)

 

 

 

 

import React,{Component} from 'react';
import Header from '../components/header';
import '../view/authorise.less';
import { createStore } from 'redux';
import { Provider, connect } from 'react-redux';
import {mapStateToProps, mapDispatchToProps} from '../redux/action'


class Authorise extends Component{

    constructor(props){
        super(props);
    }

    render() {
        const {text, onChangeText, onButtonClick} = this.props;
        return (
            <div>
                <h1 onClick={onChangeText}> {text} </h1>
                <button onClick={onButtonClick}>click me</button>
            </div>
        );
    }
}



//store
//let store = createStore(reducer);


//连接组件
Authorise = connect(mapStateToProps, mapDispatchToProps)(Authorise);



export default Authorise;

authorise.js(页面)

 

 

 

 

import React,{Component} from 'react';
import Header from '../components/header';
import '../view/authorise.less';
import { createStore } from 'redux';
import { Provider, connect } from 'react-redux';
import {mapStateToProps, mapDispatchToProps} from '../redux/action'


class Authorise extends Component{

    constructor(props){
        super(props);
    }

    render() {
        const {text, onChangeText, onButtonClick} = this.props;
        return (
            <div>
                <h1 onClick={onChangeText}> {text} </h1>
                <button onClick={onButtonClick}>click me</button>
            </div>
        );
    }
}



//store
//let store = createStore(reducer);


//连接组件
Authorise = connect(mapStateToProps, mapDispatchToProps)(Authorise);



export default Authorise;

router.js(路由类似)

 

 

 

 

/**
 * 路由配置
 **/
import React from 'react';
import { Router, Route, browserHistory, hashHistory} from 'react-router';
import authorise from '../view/authorise';

const languageSwitch = (location, cb) => {
    require.ensure([], require => {
        cb(null, require('../view/languageSwitch').default)
    },'languageSwitch')
}

const RouteConfig = (
    <Router history={hashHistory}>
        <Route path="/" component={authorise} />
        <Route path="/languageSwitch" a="bbbb" getComponent={languageSwitch} />
        <Route path="*" component={authorise} />
    </Router>
);

export default RouteConfig;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值