当前位置: 首页 > news >正文

瓷砖网站模板织梦源码官网

瓷砖网站模板,织梦源码官网,专业的河南网站建设公司,赶集网免费发布信息Vue3响应式源码实现 初始化项目结构 vue-proxy ├── effect.js ├── effect.ts ├── index.html ├── index.js ├── package.json ├── reactive.js ├── reactive.ts └── webpack.config.jsreactive.ts import { track, trigger } from "./effect&q…

Vue3响应式源码实现

初始化项目结构

vue-proxy
├── effect.js
├── effect.ts
├── index.html
├── index.js
├── package.json
├── reactive.js
├── reactive.ts
└── webpack.config.js

reactive.ts

import { track, trigger } from "./effect"// 判断是否是对象
const isObject = (target) => target !== null && typeof target === "object"// 泛型约束只能传入Object类型
export const reactive = <T extends object>(target: T) => {return new Proxy(target, {get(target, key, receiver) {console.log(target);console.log(key);console.log(receiver);let res = Reflect.get(target, key, receiver)track(target, key)if (isObject(res)) {return reactive(res)}return res},set(target, key, value, receiver) {let res = Reflect.set(target, key, value, receiver)console.log(target, key, value);trigger(target, key)return res}})}

effect.ts

// 更新视图的方法
let activeEffect;
export const effect = (fn: Function) => {const _effect = function () {activeEffect = _effect;fn()}_effect()
}// 收集依赖
const targetMap = new WeakMap()
export const track = (target, key) => {let depsMap = targetMap.get(target)if (!depsMap) {depsMap = new Map()targetMap.set(target, depsMap)}let deps = depsMap.get(key)if (!deps) {deps = new Set()depsMap.set(key, deps)}deps.add(activeEffect)
}// 触发更新
export const trigger = (target, key) => {const depsMap = targetMap.get(target)const deps = depsMap.get(key)deps.forEach(effect => effect())
}

测试

执行 tsc 转成 js 代码,没有 tsc 的全局安装 typescript

npm install typescript -g

新建 index.js,分别引入 effect.jsreactive.js

import { effect } from "./effect.js";
import { reactive } from "./reactive.js";let data = reactive({name: "lisit",age: 18,foor: {bar: "汽车"}
})effect(() => {document.getElementById("app").innerText = `数据绑定:${data.name} -- ${data.age} -- ${data.foor.bar}`
})document.getElementById("btn").addEventListener("click", () => {data.age++
})

新建index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div id="app"></div><button id="btn">按钮</button>
</body>

然后再根目录执行

npm init -y

安装依赖

npm install webpack webpack-cli webpack-dev-server html-webpack-plugin -D

然后新建 webpack.config.js

const path = require("path")
const HtmlWebpakcPlugin = require("html-webpack-plugin")module.exports = {entry: "./index.js",output: {path: path.resolve(__dirname, "dist")},plugins: [new HtmlWebpakcPlugin({template: path.resolve(__dirname, "./index.html")})],mode: "development",// 开发服务器devServer: {host: "localhost", // 启动服务器域名port: "3000", // 启动服务器端口号open: true, // 是否自动打开浏览器},
}

执行命令启动项目

npx webpack serve

image-20230904232457817

image-20230904232522425

http://www.yayakq.cn/news/887640/

相关文章:

  • 淘宝客做网站链接建设行业网上报名官网网址
  • 如何做公司o2o网站上海网站建设服务电话
  • 网站建设 教案环保设备网站建设模板
  • 石家庄哪里可以做网站潍坊网站设计制作
  • 昆山开发区网站制作十进十建 网站建设工作总结
  • 制作app需要先做网站绿色软件园
  • cpanel转移网站网络设计师未来人生规划
  • 关于做网站流程长沙游戏网站开发
  • 石家庄房产信息网站wordpress迁移保留账号
  • 新乡市四合一网站建设高端网红
  • 网站自适应怎么做北京建网站公司怎么样
  • 沈阳城市建设学院官方网站临沧网站开发
  • 合肥企业建站程序建设医院网站服务
  • 邢台路桥建设总公司网站如何做一个小程序商城
  • 郑州建站系统费用襄阳教育网站建设
  • 外贸采购网山西seo排名
  • 网页游戏网站快手株洲百度推广
  • 吉林省建设厅网站市政建设c 微信小程序开发教程
  • 隆昌住房和城乡建设官方网站网站开发需要什么关键技术
  • 湛江网站设计做网站用什么语音
  • 怎么制作网站封面在线看国内永久免费crm
  • 手表网站欧米茄官网常州建设网站公司
  • 服务好又优惠的网站制作wordpress添加访客统计
  • 青岛建站培训wordpress怎么用Redis
  • 网站建设公司没落服务app开发的公司
  • 深圳的网站建设公司哪家好合肥市住房和城乡建设局网站
  • 网站色哦优化8888如何网站建设网站
  • 济南网站价格合肥快速建站模板
  • 企业网站系统官网网站建设要学
  • 怡康医药网站建设方案做网站 用什么语言