• [Redux] Introduction


    Single immutable state tree:

      Should be just one single javascript object.

    Describing the changes by action:

      every change in the application state as a plain JavaScript object called “action”.

    Pure Function & Impure Function:

    Pure function always return the same result and no side effect.

    Impure function, has side effect or return new function.

    // Pure functions
    function square(x) {
      return x * x;
    }
    function squareAll(items) {
      return items.map(square);
    }
    
    // Impure functions
    function square(x) {
      updateXInDatabase(x);
      return x * x;
    }
    function squareAll(items) {
      for (let i = 0; i < items.length; i++) {
        items[i] = square(items[i]);
      }
    }

    The Reducer function:

      The function should have a 'previous state', 'the action has been dispatched', '¨next state' and this function should be pure.

    Writing a Counter Reducer with Tests

    function counter(state, action) {
      
      if(typeof state === "undefined"){
        return 0;
      }
      
      if(action.type === "INCREASE"){
        state += 1;
        return state;
      }else if(action.type === "DECREASE"){
        state -= 1;
        return state;
      }else{
        return state;
      }
    }
    
    expect(
      counter(0, {type: 'INCREASE'})
    ).toEqual(1);
    
    expect(
      counter(1, {type: 'INCREASE'})
    ).toEqual(2);
    
    expect(
      counter(2, {type: 'DECREASE'})
    ).toEqual(1);
    
    expect(
      counter(1, {type: 'DECREASE'})
    ).toEqual(0);
    
    // If the action is unknown, should remain be the previsou state
    expect(
      counter(1, {type: 'SOMETHING_ELSE'})
    ).toEqual(1);
    
    // If the previous state is undefined, should return the initialize state
    expect(
      counter(undefined, {})
    ).toEqual(0);
    
    console.log("PASSED!");

    Covert to ES6:

    const counter = (state = 0, action) => {
     
      switch(action.type) {
        case "INCREASE:
          return state + 1;
        case "DECREASE":
          return state -1;
        default:
          return state;
      }
    }

     

  • 相关阅读:
    极坐标
    OpenGL: 你不知道的左右手坐标系
    三角函数定义
    计算机中负数的表示与加法计算
    Vue3.x知识图谱
    数的类型
    Mac Xcode卸载后Git无法使用的解决
    JS 时间格式化
    python列表和元素的区别_python数组和列表区别
    微信小程序常用样式汇总
  • 原文地址:https://www.cnblogs.com/Answer1215/p/4993487.html
Copyright © 2020-2023  润新知