[Functional Programming ADT] Initialize Redux Application State Using The State ADT

Posted Answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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()));

 

以上是关于[Functional Programming ADT] Initialize Redux Application State Using The State ADT的主要内容,如果未能解决你的问题,请参考以下文章

python learning Functional Programming.py

Python5 函数式编程(Functional Programming)

[Functional Programming] propSatisfies with implies

[Functional Programming] Arrow Functor with contramap

[Functional Programming + React] Provide a reasonable default value for mapStateToProps in case init

[Functional Programming] Running though a serial number prediction functions for tagging, pairing th