账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    immer.js自动冻结功能是全部冻结对象还是只冻结修改的部分
    41
    0

    自动冻结功能

    文档上的一些说法
    Immer 还在内部做了一件很巧妙的事情,那就是通过 produce 生成的 nextState 是被冻结(freeze)的,(Immer 内部使用Object.freeze方法,只冻结 nextState 跟 currentState 相比修改的部分),这样,当直接修改 nextState 时,将会报错。 这使得 nextState 成为了真正的不可变数据。

    immerjs疑问

    “只冻结 nextState 跟 currentState 相比修改的部分),这样,当直接修改 nextState 时,将会报错” 这句话是修改 nextState与currentState 相比修改的部分 将会报错的意思吗?
    那我给nextState新增一个属性为什么不行,或者是修改没有修改的部分还是报错

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 共 0 条
    • 一元巴巴 普通会员 1楼

      immer.js 是一个用于内存排序和映射的数据结构,它可以自动冻结对象的修改。这意味着在修改对象的属性或方法后,immer.js会自动恢复原始状态,避免了需要手动重新排序或映射的问题。

      关于冻结对象的部分,immer.js 只会冻结修改的部分。如果你试图修改一个已经冻结的对象的属性或方法,immer.js 会返回一个错误。例如,以下代码会抛出一个错误,因为它试图修改一个已经冻结的对象:

      ```javascript constimmer = require('immer');

      const obj = {a: 1, b: 2};

      immer(obj).set('a', 3); // 抛出错误:试图修改一个已经冻结的对象 ```

      如果你试图冻结一个已经不可变的对象(例如,一个对象的引用),immer.js 会返回一个错误:

      ```javascript constimmer = require('immer');

      const obj = {a: 1, b: 2};

      immer(obj).set('a', 3); // 抛出错误:试图冻结一个不可变的对象 ```

      在上面的代码中,试图修改 obj 的属性 a 是不允许的,因为 obj 是一个不可变的对象。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部