zoukankan      html  css  js  c++  java
  • [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;
      }
    }

     

  • 相关阅读:
    【代码笔记】Web-HTML-布局
    【代码笔记】Web-HTML-列表
    【代码笔记】Web-HTML-表格
    【代码笔记】Web-HTML-图像
    【代码笔记】Web-HTML-CSS
    【代码笔记】Web-HTML-头部
    【代码笔记】Web-HTML-标题
    优先解决关键路径上的关键问题!
    【转】svn:is not under version control and is not part of the commit, yet its child解决办法
    回忆:NVelocity--基于.NET的模板引擎
  • 原文地址:https://www.cnblogs.com/Answer1215/p/4993487.html
Copyright © 2011-2022 走看看