返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Immer如何使用
  • 243
分享到

Immer如何使用

2024-04-02 19:04:59 243人浏览 独家记忆
摘要

今天小编给大家分享一下Immer如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

今天小编给大家分享一下Immer如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Immer本身也得到了广泛关注和认可,在Redux最新推荐的Redux Toolkit 中就集成了Immer

Immer并不会对原有的状态数据进行直接更改,这样就保持了不可变性,但是在使用语法上却是直接赋值,注意如图所示,直接赋值的对象并不是原有的状态数据,而是另一个Draft对象。

 const nextState = baseState.slice() // 浅拷贝

 nextState[1] = {

     // 替换元素

     …nextState[1], // 浅拷贝位置1的元素

     done: true // 修改

 }

 nextState.push({title: "Tweet about it"})

假如数据结构层次很深,同时又不想做范式化,因为一些业务场景范式化后的数据在使用时也还是要整合起来,不如直接使用树状数据来的方便,此时修改数据简直就是噩梦,所以Immer针对的就是这种情况,它仅仅是处理了复杂数据的更新,并不涉及到副作用,以下例子摘自Immer官网

 import produce from "immer"

 const nextState = produce(baseState, draft => {

     draft[1].done = true

     draft.push({title: "Tweet about it"})

 })

可以看到,现在要得到更新后的状态非常方便了,但如同刚才所说的一样,Immer也仅仅只是半自动化,不涉及副作用,所以一般最后我们还是要调用setState 或者其他的操作来完成最终的业务目的。

安装

 npm install immer

要注意的是如果想要得到额外的支持,还需要调用一些引入api,同时打包结果也会变大

支持 调用

支持ES5 enableES5()

支持Map和Set数据结构 enableMapSet()

支持JSON Patch enablePatches()

以上所有都想支持 enableAllPlugins()

用法

 // 在应用的入口处

 import {enableMapSet} from "immer"

 enableMapSet()

 // …稍后

 import produce from "immer"

 const usersById_v1 = new Map([

     ["michel", {name: "Michel Weststrate", country: "NL"}]

 ])

 const usersById_v2 = produce(usersById_v1, draft => {

     draft.get("michel")。country = "UK"

 })

 const usersById_v3 = produce(usersById_v1, draft => {

     draft.set("michel", {name: "Michel Weststrate", country: "NL"})

 })

使用produce

Immer的要点就在于produce的使用,它的签名如下

 produce(currentState, recipe: (draftState) => void): nextState

注意这些名称

produce

recipe

draftState / draft

producer

…

这些名称没法硬翻,或者翻译后失去味道,只能靠揣摩和感悟

一个produce的HW代码如下

 import produce from "immer"

 const baseState = [

     {

         title: "Learn typescript",

         done: true

     },

     {

         title: "Try Immer",

         done: false

     }

 ]

 const nextState = produce(baseState, draftState => {

     draftState.push({title: "Tweet about it"})

     draftState[1].done = true

 })

对了,HW不是华为,是Hello World

以上就是“Immer如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网JavaScript频道。

--结束END--

本文标题: Immer如何使用

本文链接: https://lsjlt.com/news/96485.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Immer如何使用
    今天小编给大家分享一下Immer如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 ...
    99+
    2024-04-02
  • React immer与Redux Toolkit使用教程详解
    目录1. immer1.1 setState结合immer使用1.2 useState结合immer使用1.3 immer和redux集合2. Redux Toolkit1. immer概述:它和immutable相似的,实现了操作对象的数...
    99+
    2024-04-02
  • 如何使用redis
    这期内容当中小编将会给大家带来有关如何使用redis ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。安装redis后,在命令行输入“redis-cli"会车输入...
    99+
    2024-04-02
  • patchnavicat如何使用
    小编给大家分享一下patchnavicat如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、把patchNavicat....
    99+
    2024-04-02
  • phpmyadmin如何使用
    这篇文章给大家分享的是有关phpmyadmin如何使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。创建数据库在 phpMyAdmin 的主界面中,可以看见有 “语言-langu...
    99+
    2024-04-02
  • 如何使用navicat
    小编给大家分享一下如何使用navicat,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Navicat注册和激活的过程就是Navicat安装的过程,激活过程也比较简便,只要输入Navicat...
    99+
    2024-04-02
  • 如何使用ORM
    本篇内容介绍了“如何使用ORM”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ObjectvieSQL简介O...
    99+
    2024-04-02
  • autotrace如何使用
    这篇文章给大家分享的是有关autotrace如何使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。autotrace定义:autotrace是一个可以自动获取SQL执行计划和相关...
    99+
    2024-04-02
  • SqlLoader如何使用
    这篇文章将为大家详细讲解有关SqlLoader如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQL*Loader(SQLLDR)是Oracle的高速批量数据加载工...
    99+
    2024-04-02
  • navicat如何使用
    这篇文章将为大家详细讲解有关navicat如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Navicat可以支持连接多种数据库,使用上的功能也比较强大。如果使用了I...
    99+
    2024-04-02
  • 如何使用DataGrip
    小编给大家分享一下如何使用DataGrip,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!DataGrip是什么DataGrip是...
    99+
    2024-04-02
  • navicat12如何使用
    这篇文章主要介绍navicat12如何使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Navicat 12 具备多项改进和新功能,能满足你对数据库开发的需求。过百种增强的功能和耳目...
    99+
    2024-04-02
  • 如何使用CassandraUnit
    这篇文章主要为大家展示了“如何使用CassandraUnit”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用CassandraUnit”这篇文章吧。  C...
    99+
    2024-04-02
  • Hibernate如何使用
    这篇文章主要介绍Hibernate如何使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  hibernate的来源  数据在各个层次之间流转,在流转过程中会发生数据类型转换等一系列...
    99+
    2024-04-02
  • 如何使用NPM
    这篇文章主要为大家展示了“如何使用NPM”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用NPM”这篇文章吧。1. 初始化包我们可以运行 npm init命...
    99+
    2024-04-02
  • serialize()如何使用
    这篇文章主要讲解了“serialize()如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“serialize()如何使用”吧!   .seriali...
    99+
    2024-04-02
  • div如何使用
    本篇内容主要讲解“div如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“div如何使用”吧!<!doctype html> <...
    99+
    2024-04-02
  • callbacks.locked()如何使用
    本文小编为大家详细介绍“callbacks.locked()如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“callbacks.locked()如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢...
    99+
    2024-04-02
  • 如何使用Vuex
    小编给大家分享一下如何使用Vuex,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是Vuex?vuex是一个专门为vue.js...
    99+
    2024-04-02
  • 如何使用useMemo
    本篇内容主要讲解“如何使用useMemo”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用useMemo”吧!作为「性能优化」手段,一般用useMemo缓存...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作