首页 > 其他分享 >手写丐版immerjs

手写丐版immerjs

时间:2024-10-22 19:21:21浏览次数:8  
标签:.__ const attr immerjs initial state 丐版 data 手写

手写丐版immerjs:

const createProxy = (target) => {

  const data = {
    __initial: target,
    __copy: null,
    __isModified:false
  }
  
  const handler = {
    get(state, attr) {
      if(!state.__isModified)return state.__initial[attr]
      if (state.__initial[attr] === 'object') {
        if (state.__copy === null) {
          state.__copy = {
            ...state.__initial
          }
        }
        createProxy(state.__initial[attr])
      }
      return state.__copy[attr]
    },
    set(state, attr, value) {
      state.__isModified = true
      state.__copy = {
        ...state.__initial,
        [attr]: value
      }
    }
  }
  
  const {
    proxy
  } =Proxy.revocable(data, handler)
  return proxy
}

const immerjs = (data,cb)=>{
  const res = createProxy(data)
  cb(res)
  return res
}
//使用案例
const obj = {
  d:'wei',
  a: {
    b: {
      c: {
        name: 'weiz'
      }
    }
  }
}
immerjs(obj,(data)=>{
  console.log(data.b===obj.b);//true
  data.b = {}
  console.log(data.b===obj.b);//false
})


标签:.__,const,attr,immerjs,initial,state,丐版,data,手写
From: https://blog.csdn.net/cainiaoxianfeng/article/details/143165803

相关文章

  • 防抖函数-手写(基本实现)
    <button>按钮</button><inputtype="text"><!--本地引入:下载js文件并且本地引入--><!--<scriptsrc="./js/underscore.js"></script>--><script>/*自己实现函数需要做的事情......
  • python基于深度学习算法的手写汉字识别-带UI界面-包环境配置运行
    1)项目基本介绍网络:深度学习CNN网络简单搭建的CNN网络环境:python>=3.5tensorflow2opencvpyqt5文件:训练预测全部源代码、训练好的模型、数据集可对20个汉字进行识别检测,配置好环境即可使用。......
  • JS中数组的splice()方法介绍 及 用原生JS手写数组splice()方法
    一、splice是什么splice()方法是用来对数组进行增、删操作,该方法返回被删除的元素,改变原数组二、splice()方法接受三个及以上的参数:第一个参数:第一个参数是起始位置(数组的索引)第二个参数:第二个参数是要删除的元素个数,如果该参数是负数则默认为0第三个参数及往后参数:这些......
  • 手写Java代码生成工具(五)生成service和serviceImpl文件
    目录前言一、创建service文件以及导入所需的类二、生成service类需要的方法三、创建ServiceImpl文件以及生成导入语句四、生成的ServiceImpl类文件中添加内容五、遍历索引,生成基础增删改查前言写博客是为了记录和分享自己的学习,所分享内容是网上的资源,由于非原创项......
  • 挑战1000道javascript手写题之实现Promise.all(9)
    Promise.all介绍Promise.all方法接收一个数组作为参数,这个参数数组的元素也都是promise实例,该方法返回一个promise示例。constp=Promise.all([p1,p2,p3]);p的状态由p1、p2、p3决定,p最后的状态要么是变成fulfilled,要么变成rejected。变成fulfilled:只有当p1、p2、p3......
  • 手写MSMQ微软消息队列收发工具类
    一、MSMQ介绍MSMQ(MicrosoftMessageQueuing)是微软开发的消息队列技术,支持事务,支持异步发送和接收消息。两个重要的概念:队列和消息。队列是存放消息的容器和传输消息的通道。消息是在队列上存储和传输的数据的基本单元;这个消息在计算机上的存在形式可以是任意格式的文件;在C#程序......
  • 【数据结构】自己动手写一个C++链表功能
    链表数据结构在操作数据时具有更高的性能,但同时因为其结构的原因会造成时间复杂度为O(N),因此理解链表结构的底层实现能够让我们在开发中对程序的性能进行进一步优化。如果你不知道什么是链表或者时间复杂度,可以参考我另外两篇文章:【数据结构】数组、链表、堆栈、队列到......
  • 手写持向量机(SVM)实现
    下面是一个简单的支持向量机(SVM)实现,用于解决线性可分问题。这个实现不使用任何机器学习库,只使用NumPy进行矩阵运算。请注意,这个实现主要用于教学目的,实际应用中推荐使用成熟的库,如scikit-learn。importnumpyasnpclassSVM:def__init__(self,learning_rate=0.001,l......
  • 基于MATLAB的BP神经网络手写数字识别系统
    介绍*:本课题为基于MATLAB的BP神经网络手写数字识别系统。带有GUI人机交互式界面。读入测试图片,通过截取某个数字,进行预处理,经过bp网络训练,得出识别的结果。可经过二次改造成识别中文汉字,英文字符等课题。运行效果示例图:......
  • 万字详解AI实践,零手写编码用AI完成开发 + 数据清洗 + 数据处理 的每日新闻推荐,带你快
    用AI+dify完成前后端开发+数据处理和数据清洗。引言数据获取和数据处理dify构建workflow进行数据清洗前端页面构建和前后端交互总结引言AI时代对开发人员的加强是非常明显的,一个开发人员可以依靠AI横跨数个自己不熟悉的领域包括前后端、算法等。让我们来做个实践,全程......