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
      }
    }
  • 相关阅读:
    习惯的本质:逐步建立新的常态
    如何度过有用的每一天
    如何利用晚上八点到十点这段时间自我提升
    为什么很多年轻人总会感到迷茫
    当你学会专注,人生才算真正成熟
    如何过上简单的生活
    游标
    触发器

    函数
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12806295.html
Copyright © 2011-2022 走看看