zoukankan      html  css  js  c++  java
  • [Redux] Rewrite reducer with Ramda Lens

    import {
      SET_STATUS,
      FETCH_FULFILLED,
      FETCH_FAILED,
      RESET,
    } from '../actions/beerActions'
    import lensProp from 'ramda/es/lensProp'
    import set from 'ramda/es/set'
    import compose from 'ramda/es/compose'
    
    const initialState = {
      data: [],
      status: 'idle', // 'idle' || 'pending' || 'success' || 'failure'
      messages: [],
    }
    
    const statusLens = lensProp('status')
    const dataLens = lensProp('data')
    const messagesLens = lensProp('messages')
    
    const setStatus = set(statusLens)
    const setData = set(dataLens)
    const setMessages = set(messagesLens)
    
    const fetchFulfilled = (data, state) => {
      return compose(
        setData(data),
        setStatus('success'),
        setMessages([]),
      )(state)
    }
    
    const reset = compose(
      setStatus('idle'),
      setMessages([]),
    )
    
    const fetchFailed = (messages, state) => {
      return compose(
        setStatus('failure'),
        setMessages([{ type: 'error', text: messages }]),
      )(state)
    }
    
    export function beersReducers(state = initialState, action) {
      switch (action.type) {
        case RESET: {
          return reset(state)
        }
        case SET_STATUS: {
          return setStatus(action.payload, state)
        }
        case FETCH_FULFILLED: {
          return fetchFulfilled(action.payload, state)
        }
        case FETCH_FAILED: {
          return fetchFailed(action.payload, state)
        }
        default:
          return state
      }
    }
  • 相关阅读:
    火狐flash插件
    centos 安装php ide (eclipse + php 插件)
    编译器的工作过程
    php中调用mysql的存储过程和存储函数
    mysql 高性能
    存储过程/游标/mysql 函数
    php 生成二维码
    frameset,frame应用,常用于后台
    html5 meta头部设置
    CAReplicatorLayer复制Layer和动画, 实现神奇的效果
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12806295.html
Copyright © 2011-2022 走看看