zoukankan      html  css  js  c++  java
  • redux模块化demo

    store.js 在redux中 store 是唯一的。

    import {createStore} from 'redux';
    import reducer from './reducer'
    // 引入后的reducer store是唯一的
    const store = createStore(reducer);
    
    export default store;

    reduce.js  合并所以reducer

    import {combineReducers} from 'redux';
    import numReducer from './num/reducer'
    import todosReducer from './todos/reducer';
    // 拿到单个模块的reducer 进行合并 传给store
    let reducer = combineReducers({
        num:numReducer,
        todos:todosReducer
    });
    
    export default reducer;

    在todos模块(文件夹)下

    state.js

    // 用来存储当前模块下的数据
    const state = {
        list:[],
        count:0
    }
    
    export default state;

    reducer.js

    // 将state导入 建立reducer函数
    import _state from './state';
    
    let reduce = (state=_state,action)=>{
        console.log(action);
        let newState = {...state};
        if(action.type==='ADD'){
            newState.count = ++newState.count;
            newState.list.push(action.title)
        }
        return newState;
    }
    // reducer 用来处理state里面的数据  数据的验证是通过action这个参数里的type进行的。
    // action这个参数的传递是通过store.dispatch来分发的。
    export default reduce;

    action.js

    // 主要作用是返回一个对象 让actions 来使用
    // p 是传递的参数
    const action = {
        ADD(p){
            return {
                type :'ADD', //这里的ADD的type是与reducer里的验证有关
                title:p
            }
        }
    }
    export default action;

    actions.js

    import action from './action';
    import store from '../store';
    // 将传递的action参数引入 
    // 将store引入 把action参数传给reducer。
    
    const actions = {
        // p 是页面传来的值
        addItem(p){
            // 将action的里面对象传递参数
            let act = action.ADD(p);
            // 使用store把action里面的对象 作为参数传递过去
            store.dispatch(act);
        }
    }
    
    export default actions;

     App.js

    import React, { Component } from 'react';
    import './App.css';
    import store from './redux/store'
    import actions from './redux/num/actions'
    import actions1 from './redux/todos/actions'
    // ui 组件 只取数据
    class App extends Component {
      constructor(props){
        super(props);
        this.state = {
          n:store.getState().num.n,
          list:store.getState().todos.list
        }
        store.subscribe(()=>{
          //只要数据变化了这个回调函数就会执行
          this.setState({
            n:store.getState().num.n
          });
          this.setState({
            list:store.getState().todos.list
          })
        })
        this.inc = this.inc.bind(this);
        this.add = this.add.bind(this);
      }
      inc(){
        // console.log(actions.dispatchAction)
        actions.dispatchAction()
      }
      add(){
        actions1.addItem(this.node.value);
        this.node.value = '';
      }
      render() {
        return (
          <div className="App" onClick={this.inc}>
            { this.state.n}
            <input type="text" ref={node=>this.node=node}/>
            <button onClick={this.add}>add</button>
            {
              this.state.list.map((item,index)=>{
                 return (
                    <div key={index}>
                      {item}
                    </div>
                 )
              })
            }
          </div>
        );
      }
    }
    
    export default App;
  • 相关阅读:
    docker固定IP地址重启不变
    关于 CentOS 7 里面 普通用户 Ulimit max user processes 值的问题
    CentOS tengine mysql 5.7 php 5.6
    strace 分析 跟踪 进程错误
    WPF中的字体改善
    C#数据类型-string
    WPF中的文字修饰
    Winform与WPF对话框(MessageBox, Dialog)之比较
    WPF中将四个数字字符串值(比如:"10,10,300,300")转为Rect
    WPF中嵌入Flash(ActiveX)
  • 原文地址:https://www.cnblogs.com/l8l8/p/9482302.html
Copyright © 2011-2022 走看看