• Redux使用教程


    在开始之前,需要安装环境,node.js可以使用npm管理包,开发的工具webstorm可以创建相应的项目。

    项目中redux是管理全局的同一个store,React-router是管理路由的,这里只使用了redux,react-router稍后介绍。

    1、先创建一个简单的项目。安装对应的包redux、react-redux、redux-thunk(异步操作action时使用)

    2、建立全局使用State,也就是store。

    import {combineReducers} from 'redux';   //combineReducers作用可以将多个reducer合并成一个,
    
    const counterReducer = (state = {value: 0}, action) => {
        //根据dispatch触发的action类型来修改对应state
        switch (action.type) {
            case 'add':
                state = {value: state.value + 1}
                break;
            case 'delete':
                state = {value: state.value - 1}
                break;
            default:
                break;
        }
        return state;
    }
    
    export default combineReducers({
        counterReducer  //这里是添加一个state值,也可以修改成 counter: counterReducer,这样在state中的key为counter来获取值
    })

    3、创建store

    import {createStore, applyMiddleware} from 'redux';
    import {createLogger} from 'redux-logger'; //日志有关
    import thunk from 'redux-thunk';  //这个必须要引入到中间件中
    
    import Init from './InitReduxCollection';  //这个是上面创建的reducer
    const middleware = [thunk]; //与异步操作有关,必须要引入,不然报错
    
    const store = createStore(Init, applyMiddleware(...middleware)); //applyMiddleware中间件,可以放入多个参数,日志中间件要放在最后
    export default store

    4、页面关联action和reducer

    /**
     * Created by Administrator on 2019/1/2.
     */
    
    import React, {Component} from 'react';
    import {connect} from 'react-redux';  //这里要注意
    import PropTypes from 'prop-types' 
    
    import './home-page.css';
    
    class HomePage extends Component {
    
        static propTypes = {
            value: PropTypes.number
        };
    
        addClick = () => {
            console.log('add....')
            let {Add} = this.props;
            Add();
    
        }
        deleteClick = () => {
            console.log('delete....')
            this.props.Delete()
        }
     
        render () {
            console.log(this.props)
     
            return <div className="home">
                <div>hello world   !!!! </div>
    
                <div className="button" onClick={this.deleteClick}>-</div> {this.props.value}  <div className="button" onClick={this.addClick}>+</div>
     
            </div>
        }
    }
    
    //这里是所有action的方法
    const mapDispatchToProps = {
    //这里先不着急创建action,先把页面和state关联,然后创建action,在将对应的action放入就可以了,可以看到第七步创建action //Add, //Delete }
    //这里是将所有reducer的state转成关联页面的props,可以通过props来访问 const mapStateToProps
    = (state) => { console.log(state) //这里打印会看到reducer合并的所有state return { ...state.counterReducer } } //将页面和全局的store关联 export default connect(mapStateToProps, mapDispatchToProps)(HomePage);

    5、创建页面和store关联

    import React , {Component} from 'react';
    import {Provider} from 'react-redux'; //用于页面和全局store关联
    import store from './page/Store';   //这个是上面第三步创建store
    import HomePage from './page/Home/HomePage';  //对应的页面
    
    export default class AppContainer extends Component {
    
        render () {
            return <Provider store={store}>
                <HomePage/>
            </Provider>
        }
    }

    6、修改显示页面,然后运行看看效果页面是否可以展示,此时action是不能触发,

    ReactDOM.render(<AppContainer />, document.getElementById('root'));

    7、创建action,然后可以将其关联到第四部中。

    export const Add = (param) => (dispatch, getState) => {
        //这里参数dispatch是页面关联时,调用传入的参数,param是调用Add时传入的参数,dispatch调用时传入参数中type是必须的,其他的可以自己定义参数名,比如dispatch({type:'add', value:2}),这个dispatch触发add的reducer,action就是这里传入的参数
        dispatch({
            type: 'add'
        });
    }
    
    export const Delete = () => (dispatch, getState) => {
        dispatch({
            type: 'delete'
        });
    }
  • 相关阅读:
    【MyEcplise SVN】myEcplise上安装SVN的多种方式
    【微信Java开发 --番外篇】错误解析
    【MyEcplise 插件】反编译插件jad
    maven打包自动配置数据库链接信息
    window.location下的属性说明
    JavaEETest
    java正则过虑字符
    微信小程序开发之大坑记之post请求
    jQuery 获取文件后缀的方法
    java通过解析文件获取apk版本等信息
  • 原文地址:https://www.cnblogs.com/wind-wang/p/10212984.html
Copyright © 2020-2023  润新知