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

河北唐山建设工程协会网站电子商务网站的建设课件

河北唐山建设工程协会网站,电子商务网站的建设课件,沈阳哪个男科医院好,网站重做 影响一、基础概念与核心特性 1. Vue3 相比 Vue2 的改进(通俗版) 问题:Vue3 比 Vue2 好在哪? 答案: 更快: Proxy 代理:Vue2 的响应式像“逐个监听保险箱”(每个属性单独监听&#xff0…

一、基础概念与核心特性

1. Vue3 相比 Vue2 的改进(通俗版)

问题:Vue3 比 Vue2 好在哪?
答案

  • 更快
    • Proxy 代理:Vue2 的响应式像“逐个监听保险箱”(每个属性单独监听),Vue3 的 Proxy 像“直接监控整个房间”(监听整个对象变化)。
    • 编译优化:Vue3 在编译阶段标记哪些是动态内容(如 {{ count }}),更新时跳过静态内容(如纯文字)。
  • 更小:通过 Tree-shaking(摇树优化),只打包你用到的功能,减少代码体积。
  • 更好用
    • Composition API:像搭积木一样组合逻辑(比如把“计数器逻辑”抽成函数,多个组件复用)。
    • 新组件
      • <Teleport>:把组件渲染到任意位置(比如弹窗放到 body 下,避免被父组件样式影响)。
      • <Suspense>:优雅处理异步加载(比如数据加载时显示 Loading 动画)。

2. Composition API vs Options API(场景对比)

问题:为什么要用 Composition API?
答案

  • Options API(Vue2 风格)

    • 把代码按类型分块(data、methods、生命周期),适合简单组件。
    • 缺点:逻辑分散,比如一个“搜索功能”的 data、methods 可能分布在多处。
    // Options API 示例  
    export default {  data() { return { keyword: '' } },  methods: { search() { ... } },  mounted() { this.search() }  
    }  
    
  • Composition API(Vue3 风格)

    • setup() 中,按功能组织代码(比如把搜索相关的数据、方法写在一起)。
    • 优点:逻辑复用更方便(类似 React Hooks)。
    // Composition API 示例  
    export default {  setup() {  const keyword = ref('');  const search = () => { ... };  onMounted(search);  return { keyword, search };  }  
    }  
    

二、响应式原理(手绘理解)

3. Vue3 的响应式原理

问题:Vue3 如何实现数据变化自动更新视图?
答案

  • Proxy 代理对象

    • 当你修改数据时,Proxy 会“拦截”操作(比如 obj.a = 1),通知视图更新。
    • 对比 Vue2:Vue2 使用 Object.defineProperty,无法监听新增属性和数组下标变化(必须用 this.$set)。
  • 代码模拟(简化版):

    function reactive(obj) {  return new Proxy(obj, {  get(target, key) {  console.log('读取了', key);  return Reflect.get(target, key);  },  set(target, key, value) {  console.log('更新了', key);  return Reflect.set(target, key, value);  }  });  
    }  
    const obj = reactive({ a: 1 });  
    obj.a = 2; // 触发 set 拦截,更新视图  
    

4. refreactive 的区别(买菜比喻)

问题:什么时候用 ref?什么时候用 reactive
答案

  • ref

    • 用于包装 基本类型(数字、字符串等),因为 Proxy 无法直接监听基本类型。
    • 使用方式:必须通过 .value 访问(就像买菜用袋子装,取菜要打开袋子)。
    const count = ref(0);  
    console.log(count.value); // 0  
    count.value++;  
    
  • reactive

    • 用于包装 对象/数组,可以直接访问属性(就像直接拿菜篮子,不用拆包装)。
    const user = reactive({ name: '张三' });  
    console.log(user.name); // 张三  
    user.name = '李四';  
    
  • 总结

    • 简单值用 ref,复杂对象用 reactive
    • 如果不想写 .value,可以用 toRefs 解构对象(见下文)。

toRefs 是 Vue 3 中用于处理响应式对象的重要工具函数,主要用于将 reactive 对象转换为普通对象,同时确保每个属性都保持响应性。这在解构响应式对象或将其属性传递给子组件时非常有用。

使用场景

  1. 解构响应式对象:直接解构 reactive 对象会失去响应性,而使用 toRefs 可以避免这一问题。
  2. 组件间通信:通过 toRefs 将响应式数据传递给子组件,确保数据在传递过程中仍能保持响应性。

基本用法

import { reactive, toRefs } from 'vue';const state = reactive({foo: 1,bar: 2,
});const stateRefs = toRefs(state);
// stateRefs 的每个属性都是 ref 对象,修改它们的值会触发视图更新stateRefs.foo.value++; // 视图会自动更新

示例代码

解构并保持响应性
<template><div><p>Foo: {{ foo }}</p><p>Bar: {{ bar }}</p><button @click="incrementFoo">Increment Foo</button></div>
</template><script>
import { reactive, toRefs } from 'vue';export default {setup() {const state = reactive({foo: 1,bar: 2,});const { foo, bar } = toRefs(state);function incrementFoo() {foo.value++;}return {foo,bar,incrementFoo,};},
};
</script>
在组合式 API 中使用
import { reactive, toRefs } from 'vue';function useCounter() {const state = reactive({count: 0,});function increment() {state.count++;}return {...toRefs(state),increment,};
}

注意事项

  • 访问方式:返回的对象属性是 ref 对象,在 JavaScript 中需通过 .value 访问;模板中则无需 .value
  • 适用范围:仅适用于 reactive 对象,不支持普通对象或 ref 对象。
  • 性能影响:大量属性可能带来一定性能开销。

总结而言,toRefs 提供了一种便捷的方式来处理响应式对象,尤其在需要解构或传递响应式数据时,能够有效简化逻辑并保持数据的响应性。

三、进阶 API 与实战技巧

5. watchwatchEffect(场景区分)

问题:监听数据变化用哪个?
答案

  • watch

    • 明确监听某个数据,适合精确控制(比如监听搜索关键词变化,触发请求)。
    watch(  keyword,  (newVal) => { fetchData(newVal) },  { immediate: true } // 立即执行一次  
    );  
    
  • watchEffect

    • 自动追踪依赖,适合副作用操作(比如根据多个数据变化更新 DOM)。
    watchEffect(() => {  console.log('关键词和页码变化了:', keyword.value, page.value);  fetchData();  
    });  
    

6. 组件通信:Provide/Inject(跨层级传参)

问题:爷爷组件如何直接传数据给孙子组件?
答案

  • 步骤
    1. 爷爷组件用 provide 提供数据。
    2. 孙子组件用 inject 获取数据。
  • 代码示例
    // 爷爷组件  
    import { provide } from 'vue';  
    setup() {  provide('theme', 'dark'); // 提供数据  
    }  // 孙子组件  
    import { inject } from 'vue';  
    setup() {  const theme = inject('theme', 'light'); // 第二个参数是默认值  return { theme };  
    }  
    

四、性能优化(通俗策略)

7. 如何让 Vue3 应用更快?

答案

  • 代码层面

    • 使用 v-once 标记静态内容(只渲染一次)。
    • v-memo 缓存动态组件(比如表格行,只有 ID 变化时才重新渲染)。
    <div v-for="item in list" :key="item.id" v-memo="[item.id]">  {{ item.name }}  
    </div>  
    
  • 打包优化

    • 按需引入组件库(比如 Element Plus 只导入用到的 Button、Input)。
    • 使用异步组件(懒加载),减少首屏代码体积。
    // 异步加载组件  
    const AsyncComponent = defineAsyncComponent(() => import('./MyComponent.vue'));  
    

五、高频面试代码片段

8. 自定义指令:点击外部关闭弹窗

场景:点击弹窗外部区域关闭弹窗。
代码

// 全局指令 v-click-outside  
app.directive('click-outside', {  mounted(el, { value: callback }) {  el.handler = (e) => {  if (!el.contains(e.target)) callback();  };  document.addEventListener('click', el.handler);  },  unmounted(el) {  document.removeEventListener('click', el.handler);  }  
});  // 使用  
<template>  <div v-click-outside="closeModal">弹窗内容</div>  
</template>  

六、项目经验(回答技巧)

9. 如何回答“封装通用组件”?

示例

  • 场景:封装一个表单组件,支持校验和提交。
  • 步骤
    1. 通过 props 接收表单配置(如字段规则)。
    2. 使用 v-model 绑定每个输入项的值。
    3. 暴露 validate() 方法供父组件调用。
    4. 使用插槽(slot)允许自定义布局。
    <template>  <form @submit.prevent="submit">  <slot></slot>  <button type="submit">提交</button>  </form>  
    </template>  
    <script>  
    export default {  methods: {  validate() { /* 校验逻辑 */ },  submit() { this.$emit('submit'); }  }  
    }  
    </script>  
    

总结

以上内容通过通俗比喻、实际场景和代码示例,拆解了 Vue3 的核心知识点。建议边学边写代码实践,结合 Vue3 官方文档 查漏补缺!


文章转载自:

http://XWbbELeg.Lgsqy.cn
http://WaJQ9akP.Lgsqy.cn
http://VGZ6i1pN.Lgsqy.cn
http://GyM7T9X6.Lgsqy.cn
http://cZXovXIe.Lgsqy.cn
http://uR9Yj4IW.Lgsqy.cn
http://iKW218Wt.Lgsqy.cn
http://PH6eY3Lh.Lgsqy.cn
http://eAkTaELw.Lgsqy.cn
http://9MGkC6Co.Lgsqy.cn
http://4b2hoIhL.Lgsqy.cn
http://McT8pMth.Lgsqy.cn
http://sz7P2Qz0.Lgsqy.cn
http://9FnktjNr.Lgsqy.cn
http://apaVVkn6.Lgsqy.cn
http://cqmWsJJI.Lgsqy.cn
http://MFbscHTZ.Lgsqy.cn
http://LePHUW1R.Lgsqy.cn
http://ZkibaamV.Lgsqy.cn
http://FqVL15Y0.Lgsqy.cn
http://bb0o4sZv.Lgsqy.cn
http://Ym9VuDoe.Lgsqy.cn
http://0hjuBONX.Lgsqy.cn
http://EiwuNBlY.Lgsqy.cn
http://6lR4RUlJ.Lgsqy.cn
http://U0LqoN6y.Lgsqy.cn
http://D1AiAdGu.Lgsqy.cn
http://Bi2o60xs.Lgsqy.cn
http://t5G3qv30.Lgsqy.cn
http://h2oMHOLN.Lgsqy.cn
http://www.dtcms.com/wzjs/673084.html

相关文章:

  • 学做网站论坛坑人吗网络营销推广的主要目标
  • 建设网站的知识竞赛网站建设的工作流程
  • 买东西网站哈尔滨短视频运营
  • 兖州网站建设推广做网站多久能学会
  • 南通外贸建站响应式网站 html
  • 太原企业网站制作公司做网站资料准备什么
  • php自己做网站防止网站流量被刷
  • 动易的网站系统网站页面优化方法有哪些内容
  • 鄂尔多斯住房和城乡建设局网站郑州网站优化公司哪家好
  • 网站被墙 怎么做301自媒体申请注册
  • 和城乡建设厅官方网站跟网站做流量
  • 能下短视频网站做牙织梦网站版本
  • 怎样做可以互动留言的网站公司网站建设需要多少钱
  • 网站开发静态和动态太原seo排名公司
  • 上线了做网站怎么样wordpress页面排序
  • 做彩票网站需要什么服务器网站开发人员需要去做原型吗
  • 南京网站微信建设wordpress如何绑定域名
  • 淘宝客如何做网站招商网站大全五金电器
  • 做旅游网站需要什么海口网站建设方案推广
  • 网站建好更新九江网络营销
  • 学院网站建设流程图如何美化网站
  • 网站建设最低要求郑州专做喜宴的网站
  • 成都有实力的网站建设新媒体运营岗位职责
  • 上海网站建设聚众网络汕头网站关键词优化教程
  • 营销型网站建设 多少钱设计素材网站照片
  • 比特币交易网站开发在家给别人做网站合法吗
  • 网站建设一般多少钱比较合适wordpress 博客编辑器
  • 如何做百度推广的网站网站兼容工具
  • 广告联盟网站怎么做网站不能正常显示出现后台代码
  • 湛江网站网站建设怎样更换动易2006网站模板