zoukankan      html  css  js  c++  java
  • [Javascript] Simplify Creating Immutable Data Trees With Immer

    Immer is a tiny library that makes it possible to work with immutable data in JavaScript in a much more straight-forward way by operating on a temporarily draft state and using all the normal JavaScript API's and data structures. The first part of the lesson explains how to use Immer, and the second part of the lesson shows you how it can be used to simplify, for example, Redux reducers.

    Immer has a few unique features:

    • Supports arbitrary, deep modifications in immutable data trees
    • Strongly typed
    • Uses JavaScript native data structures, no new API to learn
    • Automatically freezes any data that is produced

    The whole point of Immer is that you can wrap you reducer function with the function immer provide, let's call 'produce'.  When you call it, if you don't do anything, it just return your previous state, if you do any partial mutation, if will keep original object untouched, instead creating immutable version return to you. therefore make code much simpler.

    // Before
    
    const byId = (state, action) => {
      switch (action.type) {
        case RECEIVE_PRODUCTS:
          return {
            ...state,
            ...action.products.reduce((obj, product) => {
              obj[product.id] = product
              return obj
            }, {})
          }
        default:
          return state
      }
    }
    // After
    
    import produce from 'immer'
    
    const byId = (state, action) =>
      produce(state, draft => {
        switch (action.type) {
          case RECEIVE_PRODUCTS:
            action.products.forEach(product => {
              draft[product.id] = product
            })
        }
      })

    Or an improved version:

    import produce from 'immer'
    
    const byId = produce((draft, action) => {
      switch (action.type) {
        case RECEIVE_PRODUCTS:
        action.products.forEach(product => {
            draft[product.id] = product
        })
      }
    })
  • 相关阅读:
    BZOJ 1101: [POI2007]Zap [莫比乌斯反演]
    磁盘I/O高居不下,通过什么来查看占用I/O的进程?
    jmeter中特殊的时间处理方式
    Fiddler抓包工具版面认识(一)
    Jmeter 时间函数工具汇总
    Jmeter之__CSVRead随机读取变量
    jmeter配置元件之计数器
    Jmeter全局变量设置
    数据驱动和关键字驱动
    sqlmap工具命令行的含义
  • 原文地址:https://www.cnblogs.com/Answer1215/p/8285359.html
Copyright © 2011-2022 走看看