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

企业的网站品牌推广专业制作教学课件

企业的网站品牌推广,专业制作教学课件,第三方电子商务平台有哪些优势,重庆景点文章目录 前言✅ 当前已实现模块汇总#xff08;mini-vue#xff09;✅ 每个模块简要源码摘要1. reactive.ts2. effect.ts3. computed.ts4. ref.ts5. toRef.ts6. toRefs.ts ✅ 下一阶段推荐目标所有核心模块对应的 __tests__ 测试文件#xff0c;**带完整注释**✅ reactive.… 文章目录 前言✅ 当前已实现模块汇总mini-vue✅ 每个模块简要源码摘要1. reactive.ts2. effect.ts3. computed.ts4. ref.ts5. toRef.ts6. toRefs.ts ✅ 下一阶段推荐目标所有核心模块对应的 __tests__ 测试文件**带完整注释**✅ reactive.spec.ts✅ effect.spec.ts✅ computed.spec.ts✅ ref.spec.ts✅ toRefs.spec.ts✅ 总结你已支持的模块对应测试 前言 当前已完成的 mini-vue 项目功能模块列表以及每个模块对应 Vue 3 中的核心功能对照和简要源码说明 ✅ 当前已实现模块汇总mini-vue 模块文件名对应 Vue 3 功能描述响应式核心reactive.tsVue.reactive通过 Proxy 实现深层响应式对象追踪副作用收集effect.tsVue.effect依赖自动收集、调度器scheduler、懒执行lazy计算属性computed.tsVue.computed支持懒计算、缓存、依赖追踪、调度触发基本 Refref.tsVue.ref包装原始值为响应式对象追踪 value 的读写操作对象属性转 ReftoRef.tsVue.toRef将 reactive 对象的某个属性变为可独立响应式的 Ref批量属性转 ReftoRefs.tsVue.toRefs将整个对象的所有属性都转为 Ref支持结构保持响应式 ✅ 每个模块简要源码摘要 1. reactive.ts import { track, trigger } from ./effectexport function reactiveT extends object(target: T): T {return new Proxy(target, {get(target, key, receiver) {track(target, key)return Reflect.get(target, key, receiver)},set(target, key, value, receiver) {const result Reflect.set(target, key, value, receiver)trigger(target, key)return result}}) }2. effect.ts type EffectFn () void interface EffectOptions {lazy?: booleanscheduler?: () void }let activeEffect: EffectFn | null null const targetMap new WeakMap()export function effect(fn: EffectFn, options: EffectOptions {}) {const effectFn () {activeEffect effectFnconst result fn()activeEffect nullreturn result}if (options.scheduler) effectFn.scheduler options.schedulerif (!options.lazy) effectFn()return effectFn }export function track(target: object, key: string | symbol) { ... } export function trigger(target: object, key: string | symbol) { ... }3. computed.ts export function computedT(getter: () T) {let value: Tlet dirty trueconst runner effect(getter, {lazy: true,scheduler: () {dirty truetrigger(obj, value)}})const obj {get value() {track(obj, value)if (dirty) {value runner()dirty false}return value}}return obj }4. ref.ts export class RefImplT {private _value: Tconstructor(value: T) {this._value value}get value() {track(this, value)return this._value}set value(newVal: T) {if (newVal ! this._value) {this._value newValtrigger(this, value)}} }export function refT(value: T) {return new RefImpl(value) }5. toRef.ts export function toRefT extends object, K extends keyof T(obj: T, key: K) {return {get value() {track(obj, key)return obj[key]},set value(val) {obj[key] valtrigger(obj, key)}} }6. toRefs.ts import { toRef } from ./toRefexport function toRefsT extends object(obj: T) {const result: any {}for (const key in obj) {result[key] toRef(obj, key)}return result }✅ 下一阶段推荐目标 模块Vue 功能说明isRefVue.isRef()判断对象是否为 ref 实例unrefVue.unref()解包 ref 或返回原始值watchVue.watch()监听响应式值变化执行回调readonlyVue.readonly()创建只读响应式对象禁止写入shallowRefVue.shallowRef()创建浅层响应式对象 所有核心模块对应的 __tests__ 测试文件带完整注释 ✅ reactive.spec.ts import { describe, it, expect } from vitest import { reactive } from ../src/reactive import { effect } from ../src/effectdescribe(mini-vue: reactive, () {it(should track and trigger on get/set, () {const obj reactive({ count: 0 })let dummy: number 0effect(() {dummy obj.count})expect(dummy).toBe(0)// 修改属性 → 触发 trigger → 重新执行 effectobj.countexpect(dummy).toBe(1)}) })✅ effect.spec.ts import { describe, it, expect, vi } from vitest import { reactive } from ../src/reactive import { effect } from ../src/effectdescribe(mini-vue: effect, () {it(should re-run effect on dependency change, () {const state reactive({ num: 1 })let dummyeffect(() {dummy state.num})expect(dummy).toBe(1)state.numexpect(dummy).toBe(2)})it(should allow scheduler, () {const state reactive({ foo: 1 })const scheduler vi.fn()const runner effect(() state.foo, { scheduler })// 不会立即运行 effect而是执行 schedulerstate.fooexpect(scheduler).toHaveBeenCalled()}) })✅ computed.spec.ts import { describe, it, expect, vi } from vitest import { reactive } from ../src/reactive import { computed } from ../src/computed import { effect } from ../src/effectdescribe(mini-vue: computed, () {it(should compute lazily and cache, () {const state reactive({ count: 1 })const getter vi.fn(() state.count 1)const c computed(getter)// 没访问前不会调用 getterexpect(getter).not.toHaveBeenCalled()// 第一次访问计算并缓存expect(c.value).toBe(2)expect(getter).toHaveBeenCalledTimes(1)// 第二次访问走缓存c.valueexpect(getter).toHaveBeenCalledTimes(1)// 修改依赖缓存失效state.countexpect(c.value).toBe(3)expect(getter).toHaveBeenCalledTimes(2)})it(should work inside effect, () {const state reactive({ count: 1 })const c computed(() state.count)let dummyeffect(() {dummy c.value})expect(dummy).toBe(1)state.countexpect(dummy).toBe(2)}) })✅ ref.spec.ts import { describe, it, expect } from vitest import { ref } from ../src/ref import { effect } from ../src/effectdescribe(mini-vue: ref, () {it(should hold a value, () {const r ref(1)expect(r.value).toBe(1)})it(should be reactive, () {const r ref(1)let dummyeffect(() {dummy r.value})expect(dummy).toBe(1)r.valueexpect(dummy).toBe(2)})it(should not trigger if value not changed, () {const r ref(1)let dummy 0let calls 0effect(() {callsdummy r.value})expect(calls).toBe(1)r.value 1 // 设置相同值effect 不应重新执行expect(calls).toBe(1)}) })✅ toRefs.spec.ts import { describe, it, expect } from vitest import { reactive } from ../src/reactive import { toRef } from ../src/toRef import { toRefs } from ../src/toRefs import { effect } from ../src/effectdescribe(mini-vue: toRef / toRefs, () {it(toRef should convert property to ref, () {const obj reactive({ count: 1 })const countRef toRef(obj, count)let dummyeffect(() {dummy countRef.value})expect(dummy).toBe(1)obj.countexpect(dummy).toBe(2)countRef.value 3expect(obj.count).toBe(3)})it(toRefs should convert all properties to refs, () {const obj reactive({ count: 1, name: vue })const refs toRefs(obj)expect(refs.count.value).toBe(1)expect(refs.name.value).toBe(vue)refs.count.valueexpect(obj.count).toBe(2)obj.name mini-vueexpect(refs.name.value).toBe(mini-vue)}) })✅ 总结你已支持的模块对应测试 模块名测试文件已验证功能reactivereactive.spec.tsget/set 追踪触发effecteffect.spec.ts基础响应式绑定、scheduler 调度computedcomputed.spec.ts懒计算、缓存、响应式依赖更新refref.spec.tsvalue 包装、响应式触发、去重toRef/toRefstoRefs.spec.ts属性映射为 ref、保持响应式联动
http://www.pierceye.com/news/438579/

相关文章:

  • 卢松松网站源码网站建设讲师招聘
  • wordpress建站网页无法运vs网站开发表格大小设置
  • 网站怎么制作教程科技小论文怎么写
  • 青岛外贸建设网站制作小程序制作页面教程
  • wordpress 整合phpseo推广有效果吗
  • 毕业设计做网站代码营销推广软文案例
  • 网站seo 文章转载 修改标题手机oa办公系统下载
  • 营销型网站设计工资商城是什么平台
  • 有没有可以在线做化学实验的网站乐从网站制作
  • 网站qq 微信分享怎么做的网络销售网站有哪些
  • 长沙电商网站制作网页设计模板素材旅游
  • 阿里巴巴 网站 建设wordpress支付宝红包
  • 如何建一个企业网站网站建设方案保障措施
  • 网站制作工作室24小时接单一起做网站
  • 专业购物网站建设多少钱搜索引擎推广的基本方法
  • 高端手机网站建设需要多少钱五金制品东莞网站建设
  • 网站运营与维护是什么意思出入成都最新规定今天
  • 网站建设 企炬江阴企业形象包装公司
  • 移动网站开发公司免费的视频网站推广软件
  • 深圳网站定制公司宝应网站建设
  • 哈尔滨 做网站公司淮南发布app下载
  • 能发朋友圈的网站建设语不同类型网站比较及网站域名设计
  • 企业融资只有两种方法seo包括网站建设吗
  • 网站制作简单协议深圳市宝安区中医院
  • 中山骏域网站建设求2021没封的良心网站
  • 域名空间网站建设要多少钱全屋定制设计流程
  • 建设网站的网站江苏旅游网站开发设计与实现
  • 河北辛集住房和城乡建设厅网站购车网站开发数据库er图
  • 简单flash个人网站网站服务器和直播服务器一样吗
  • 教育网站建设需求文档门户网站系统建设清单