首页 > 其他分享 >vue处理响应式的思路

vue处理响应式的思路

时间:2023-09-30 13:11:06浏览次数:30  
标签:function funcs vue obj 响应 window .__ func 思路

首先看如下js代码

let a = '张三'
console.log(a) // 当前页面展示的是张三 a = '李四'

首先页面刚开始渲染的时候数据a为张三,之后将a修改为了李四以后页面不会发生改变,但是数据已经修改了,vue为了解决这一问题,采用响应式的办法。

通过对象的defineProperty方法,在回调函数中监听;

Object.defineProperty(obj, key, {
      get: function () {
        //  依赖收集,记录:是哪个函数在用我return internalValue;
      },
      set: function (val) {
        internalValue = val;
        // 派发更新,运行:执行用我的函数
      },
    });

要考虑到当然不是只给一个固定的函数使用,所以会涉及到自动读取需要进行响应的对象,并通过数组对其进行保存,最后通过set函数进行派发更新

function observe(obj) {
  for (const key in obj) {
    let internalValue = obj[key];
    let funcs = [];
    Object.defineProperty(obj, key, {
      get: function () {
        //  依赖收集,记录:是哪个函数在用我
        if (window.__func && !funcs.includes(window.__func)) {
          funcs.push(window.__func);
        }
        return internalValue;
      },
      set: function (val) {
        internalValue = val;
        // 派发更新,运行:执行用我的函数
        for (var i = 0; i < funcs.length; i++) {
          funcs[i]();
        }
      },
    });
  }
}

function autorun(fn) {
  window.__func = fn;
  fn();
  window.__func = null;
}

 

标签:function,funcs,vue,obj,响应,window,.__,func,思路
From: https://www.cnblogs.com/shiyiersan/p/17737749.html

相关文章

  • Vue自定义指令
    定义指令全局定义//指令名称为:mydirec1Vue.directive('mydirec1',{//指令配置})//指令名称为:mydirec2Vue.directive('mydirec2',{//指令配置})之后,所有的组件均可以使用mydirec1和mydirec2指令<template><!--某个组件代码--><div><MyCompv-......
  • vue_error_Runtime directive used on component with non-element root node. The di
    翻译:'运行时指令,用于非元素根节点的组件。这些指令将无法发挥预期的作用';这个错误发生在我将v-show放在自定义组件上时,我想是因为自定义组件在渲染时会被自定义组件的内部元素替换,因此设置是无效的解决:在自定义组件外加一个div,把v-show写在div上......
  • 7、Windows应急响应
    Windows应急响应一、概述近年来,随着互联网的发展网络安全攻击事件也是大幅度增多,如何在第一时间发现攻击事件,并实施应急处置,能够有效的将损失降到最低。在实施应急响应的过程中,需要从多方面进行联动工作,具体的流程和依据可以参考《GB∕T38645-2020信息安全技术网络安全事件应......
  • 基于vue和element-ui开发仿桌面文件夹组件
    ......
  • 虚拟文件系统的实现思路
    虚拟文件系统的实现思路VFS(VirtualFileSystem)(虚拟文件系统)这里讨论的VFS,是区别于系统中的VFS,更多的是指代自己实现的小型简易的文件系统。像是常见的游戏封包,也可以作为一种VFS的数据结构部分。全部情况都基于Windows平台进行讨论。VFS的架构概念接口部分需要把VF......
  • 请求和响应
    第1关:通过response对象刷新网页任务描述本关任务:编写一个网页定时刷新并跳转的功能。相关知识为了完成本关任务,你需要掌握HttpServletResponse对象的常用方法和应用。编程要求在右侧编辑器Begin-End之间补充代码,编写一个模拟用户登录成功2秒后跳转至百度首页的......
  • vue前端框架ruoyi介绍
    Ruoyi是一个基于Vue.js和SpringBoot框架构建的开源前后端分离的企业级快速开发平台。它遵循了前后端分离的架构模式,将前端和后端进行解耦,使得系统更加灵活、可扩展和易于维护。Ruoyi的前端部分采用了Vue.js框架,这是一个流行的JavaScript前端框架,专注于构建用户界面。Vue......
  • FastAPI学习-25.response_model 定义响应模型
    你可以在任意的_路径操作_中使用 response_model 参数来声明用于响应的模型:@app.get()@app.post()@app.put()@app.delete()fromtypingimportAny,List,UnionfromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()classItem(BaseModel)......
  • 基于vue和element-ui的搜索下拉滚动条组件
    ......
  • Vue源码学习(八):生命周期调用
    好家伙, Vue源码学习(七):合并生命周期(混入Vue.Mixin)书接上回,在上一篇中,我们已经实现了合并生命周期现在,我们要在我们的初始化过程中,注册生命周期 1.项目目录 红框为本篇涉及到的.js文件 2.先来看/utils/index.jsexportconstHOOKS=["beforeCreated......