zoukankan      html  css  js  c++  java
  • react redux 使用

    详情可查看github dome 演示文件   https://github.com/fuyunchun/react-redux-demo.git

    index.js 入口文件

    import React from 'react';
    import ReactDOM from 'react-dom';
    import App from './app'
    import {Provider} from 'react-redux' 
    import {createStore,applyMiddleware} from 'redux'
    import {BrowserRouter} from 'react-router-dom'
    import thunk from 'redux-thunk'; //处理异步的中间件,(和applyMiddleware一起使用)
    import reducer from './reducer'
    
    const store = createStore(reducer,applyMiddleware(thunk))
    
    ReactDOM.render(
      <Provider store={store}>
        <BrowserRouter>
          <App />
        </BrowserRouter>
      </Provider>
      ,document.getElementById('root')
    );

    app.js自定义组件

    import React from 'react'
    import {Link , Route} from 'react-router-dom'
    import {connect} from 'react-redux'
    import {ADD,REMOVE,ASYNC} from './counder'
    
    function kehuan(){
        return <h1>《科幻类图书》</h1>
    }
    
    function xiaoshui(){
        return <h1>《小说类图书》</h1>
    }
    
    // 使用 @connect 需要安装redux装饰器,详情见下
    https://www.cnblogs.com/tlfe/p/13930332.html
    
    @connect(
        // state => ({num:state}), 没有合并reducer之前这么用
        state => ({num:state.counder}),
        {ADD,REMOVE,ASYNC}
    )
    
    class App extends React.Component{
        render(){
            return (
                <div>
                    <ul>
                        <li>
                            <Link to="/">科幻类图书</Link>
                        </li>
                        <li>
                            <Link to="/xiaoshui">小说类图书</Link>
                        </li>
                    </ul>
                    <Route path="/" exact component={kehuan}></Route>
                    <Route path="/xiaoshui" component={xiaoshui}></Route>
                    <div>还剩{this.props.num}本图书</div>
                    <button onClick={this.props.ADD.bind(this)}>申请图书</button>
                    <button onClick={this.props.REMOVE.bind(this)}>上交图书</button>
                    <button onClick={this.props.ASYNC}>缓两天在交</button>
                </div>
            )
        }
    }
    
    export default App

    counder.js 文件

    const add = '申请图书'
    const remove = '上交图书'
    
    function counder(state=0,action){
        switch(action.type){
            case add : return state + 1
            case remove : return state - 1
            default : return 10
        }
    }
    
    function ADD(){
        return {type:add}
    }
    
    function REMOVE(){
        return {type:remove}
    }
    
    // 处理异步的
    function ASYNC(){
        return dispatch => {
            setTimeout(() => {
                dispatch(REMOVE())
            },2000)
        }
    }
    
    export {
        counder,
        ADD,
        REMOVE,
        ASYNC
    }

    reducer.js 合并多个reducer

    // 合并多个 reducer
    
    import {combineReducers} from 'redux'
    
    import {counder} from './counder'  
    
    // 有多少个直接在下面加
    export default combineReducers({
        counder
    })
  • 相关阅读:
    PHP 设计模式系列 —— 资源库模式(Repository)
    在 Laravel 5 中使用 Repository 模式实现业务逻辑和数据访问的分离
    laravel集合
    2013项目总结
    项目总结
    到底创建了几个String对象?
    String s=new String("abc")创建了几个对象?
    局部刷新
    robot framework 在pycharm中语法无法高亮显示的,显示绿色解决办法(Robot Framework with PyCharm)
    UNIX环境高级编程——进程管理和通信(总结)
  • 原文地址:https://www.cnblogs.com/tlfe/p/13936691.html
Copyright © 2011-2022 走看看