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;
  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/l8l8/p/9482302.html
Copyright © 2011-2022 走看看