zoukankan      html  css  js  c++  java
  • [Functional Programming ADT] Initialize Redux Application State Using The State ADT

    Not only will we need to give our initial state to a Redux store, we will also need to be able to reset our state at any time by dispatching an action. We can get the best of both worlds by having a function that will return an object with all of our initial values in it. Then use that function to craft a State ADT transition that will throw out whatever our previous state was and replace it with the original initial state.

    We’ll not only build out an initialize state transaction, but also use that new transaction to craft an action creator to expose a means to dispatch at any time an action that will reset our state.

    Set initial state: 

    We use PUT state to reset the state.

    import State from "crocks/State";
    
    const { put } = State;
    
    // initialState :: () -> AppState
    export const initialState = () => ({
      colors: ["orange", "green", "blue", "yellow"],
      shapes: ["triangle", "circle", "square"],
      cards: [],
      hint: {},
      isCorrect: null,
      left: 8,
      moves: 0,
      rank: 4,
      seed: 23
    });
    
    // initialize :: () -> State AppState ()
    const initialize = () => put(initialState());
    
    export default initialize;

    Create action for reducer:

    1. Create action const string

    2. Action creator

    3. Create reducer, bind action const to state ()

    import { createAction, createReducer } from "../helpers";
    
    import start, { markCardsUnselected } from "../model/game";
    import initialize from "../model/initialize";
    
    const HIDE_ALL_CARDS = "HIDE_ALL_CARDS";
    const START_GAME = "START_GAME";
    const RESET_GAME = "RESET_GAME";
    
    // hideAllCards :: String -> Action String
    export const hideAllCards = createAction(HIDE_ALL_CARDS);
    
    // startGame :: String -> Action String
    export const startGame = createAction(START_GAME);
    
    // startGame :: String -> Action String
    export const resetGame = createAction(RESET_GAME);
    
    // reducer :: Reducer
    const reducer = createReducer({
      HIDE_ALL_CARDS: markCardsUnselected,
      START_GAME: start,
      RESET_GAME: initialize
    });
    
    export default reducer;

    Kick off:

    Call the reducer with state, action.

    import log from "./logger";
    
    import reducer from "./data/reducers";
    
    import { resetGame } from "./data/reducers/game";
    
    import initialize from "./data/model/initialize";
    
    log(reducer({}, resetGame()));
  • 相关阅读:
    spring3.1, hibernate4.1 配置备份,struts2.2.1,sitemesh 2.4.2
    java 动态AOP
    制作可以执行的 JAR 文件包及 jar 命令详解
    struts result Annotation 参考
    Android线段与矩形碰撞检测函数
    防止aspxspy木马列服务 iis信息 执行命令提权等操作
    博客园申请及页面定制CSS
    C# 中将月份格式化为英语缩写格式
    通过Web Service获取天气预报并朗读
    windows下html/javascript调用可执行程序
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10356405.html
Copyright © 2011-2022 走看看