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

扁平化企业网站代理公司的经营范围

扁平化企业网站,代理公司的经营范围,paypal账号注册,侨联网站建设computed() ref() 在 Vue 中#xff0c;computed() 和 ref() 是 Vue 3 组合式 API 的核心工具#xff0c;它们分别用于 计算属性 和 响应式数据。以下是它们的区别和用法#xff1a; 1. ref() 作用 用于创建响应式的单一数据。可以是基本类型#xff08;如字符串、数字、…computed() ref() 在 Vue 中computed() 和 ref() 是 Vue 3 组合式 API 的核心工具它们分别用于 计算属性 和 响应式数据。以下是它们的区别和用法 1. ref() 作用 用于创建响应式的单一数据。可以是基本类型如字符串、数字、布尔值或对象类型。当 ref 的值发生变化时依赖它的组件会自动重新渲染。 用法 import { ref } from vue;const count ref(0); // 创建一个响应式变量// 修改值 count.value; // 必须通过 .value 修改或访问 ref 的值console.log(count.value); // 输出: 1特点 基本类型ref 会将值包装为一个响应式对象访问或修改时需要通过 .value。对象类型如果 ref 包裹的是对象Vue 会自动将对象的属性变为响应式。 示例 import { ref } from vue;const user ref({ name: Alice, age: 25 }); // 包裹一个对象// 修改对象属性 user.value.name Bob; console.log(user.value.name); // 输出: Bob2. computed() 作用 用于定义基于其他响应式数据的 派生状态。computed 的值会根据依赖的响应式数据自动更新。适合用来处理需要动态计算的值。 用法 import { ref, computed } from vue;const count ref(0);// 定义一个计算属性 const doubleCount computed(() count.value * 2);console.log(doubleCount.value); // 输出: 0count.value; // 修改 count 的值 console.log(doubleCount.value); // 输出: 2特点 computed 的值是只读的不能直接修改。如果需要可写的计算属性可以传入 get 和 set 方法。 可写计算属性 import { ref, computed } from vue;const count ref(0);// 可写计算属性 const doubleCount computed({get: () count.value * 2,set: (newValue) {count.value newValue / 2; // 反向修改 count} });doubleCount.value 10; // 修改 doubleCount console.log(count.value); // 输出: 53. ref() 和 computed() 的区别 特性ref()computed()用途定义响应式的单一数据定义基于其他响应式数据的派生状态是否需要 .value是是是否可写是默认不可写可通过 get 和 set 实现依赖性独立存在不依赖其他响应式数据依赖其他响应式数据性能直接存储值简单高效有缓存机制只有依赖数据变化时才重新计算 4. 综合示例 以下是一个同时使用 ref() 和 computed() 的示例 script setup import { ref, computed } from vue;// 定义响应式数据 const price ref(100); const quantity ref(2);// 定义计算属性 const total computed(() price.value * quantity.value);// 修改响应式数据 price.value 150;console.log(total.value); // 输出: 300 /scripttemplatedivp单价: {{ price }}/pp数量: {{ quantity }}/pp总价: {{ total }}/p/div /template5. 在 Options API 中的等价用法 在 Vue 3 的 Options API 中ref() 和 computed() 的功能可以通过 data 和 computed 选项实现 等价代码 script export default {data() {return {price: 100, // 等价于 ref(100)quantity: 2 // 等价于 ref(2)};},computed: {total() {return this.price * this.quantity; // 等价于 computed(() price.value * quantity.value)}} }; /scripttemplatedivp单价: {{ price }}/pp数量: {{ quantity }}/pp总价: {{ total }}/p/div /template6. 总结 ref()用于定义响应式的单一数据适合存储基本类型或对象。computed()用于定义基于其他响应式数据的派生状态具有缓存机制。组合使用ref() 定义基础数据computed() 定义基于基础数据的动态值。 case 2 script setup import { ref, computed } from vue; // 原始数据 const data ref([ { position: { x: 1, y: 2 } }, { position: { x: 3, y: 4 } }, { position: { x: 5, y: 6 } } ]); // 数据转换函数 const convertData (sourceData) { try { const paths sourceData .filter(item item?.position typeof item.position object) .map(item item.position); return [{ paths: paths }]; } catch (error) { console.error(数据转换错误:, error); return [{ paths: [] }]; } }; // 计算属性 const convertTodata computed(() convertData(data.value)); // 更新数据的方法 const updateData (newData) { data.value newData; }; /script template div classp-4 h2 classtext-xl mb-4转换后的数据:/h2 pre classbg-gray-100 p-4 rounded {{ JSON.stringify(convertTodata, null, 2) }} // 使用 JSON.stringify 将 convertTodata 的结果格式化为 JSON 字符串并显示在页面/pre /div /template script export default { name: DataConverter, // ref() - data() data() { return { // const data ref([...]) 变成 data: [ { position: { x: 1, y: 2 } }, { position: { x: 3, y: 4 } }, { position: { x: 5, y: 6 } } ] } }, // computed() - computed: {} computed: { // const convertTodata computed(() ...) 变成 convertTodata() { return this.convertData(this.data); } }, methods: { convertData(sourceData) { try { const paths sourceData .filter(item item?.position typeof item.position object) .map(item item.position); return [{ paths: paths }]; } catch (error) { console.error(数据转换错误:, error); return [{ paths: [] }]; } }, // const updateData (newData) { data.value newData } 变成 updateData(newData) { this.data newData; } } }; /script template div classp-4 h2 classtext-xl mb-4转换后的数据:/h2 pre classbg-gray-100 p-4 rounded {{ JSON.stringify(convertTodata, null, 2) }} /pre /div /template style scoped .p-4 { padding: 1rem; } .text-xl { font-size: 1.25rem; line-height: 1.75rem; } .mb-4 { margin-bottom: 1rem; } .bg-gray-100 { background-color: #f3f4f6; } .rounded { border-radius: 0.25rem; } /style 主要转换规则 ref() 转换: // Composition API const data ref([...]) // Options API data() { return { data: [...] } } computed() 转换: // Composition API const result computed(() {...}) // Options API computed: { result() { return {...} } } 方法转换: // Composition API const updateData (newData) { data.value newData } // Options API methods: { updateData(newData) { this.data newData } } 数据访问: // Composition API data.value // Options API this.data computed() 能改为 ref() 吗 在 Vue 3 中computed() 和 ref() 是不同的工具虽然它们都可以创建响应式数据但它们的用途和行为不同。computed() 不建议直接改为 ref()因为它们的核心区别在于 ref() 是用于存储和管理响应式的单一数据。computed() 是用于基于其他响应式数据派生出新的值并且具有 缓存机制。 如果你想用 ref() 替代 computed()需要手动实现类似 computed() 的功能但这通常不推荐因为 computed() 已经为你处理了依赖追踪和缓存。ref() 会丢失 computed() 的依赖追踪和缓存特性。 什么时候可以用 ref() 替代 computed() 如果你的计算逻辑非常简单且不需要依赖缓存机制可以用 ref() 和 watchEffect() 或 watch() 来实现类似的功能。 如何用 ref() 替代 computed() 以下是一个示例展示如何用 ref() 和 watchEffect() 替代 computed() 原始代码使用 computed() import { ref, computed } from vue;const count ref(0); const doubleCount computed(() count.value * 2);console.log(doubleCount.value); // 输出: 0count.value; console.log(doubleCount.value); // 输出: 2改为使用 ref() 和 watchEffect() import { ref, watchEffect } from vue;const count ref(0); const doubleCount ref(0);// 使用 watchEffect 手动更新 doubleCount watchEffect(() {doubleCount.value count.value * 2; });console.log(doubleCount.value); // 输出: 0count.value; console.log(doubleCount.value); // 输出: 2对比分析 特性computed()ref() watchEffect()watch依赖追踪自动追踪依赖否, 使用 watchEffect 手动更新值否, 使用 watch 手动更新值缓存机制有缓存每次使用时使用的预先计算存储的的 cache依赖变化时重新计算, 使用时使用的重新计算存储的的 new cache没有缓存每次使用时重新计算依赖变化时重新计算否, 每次 data(){} 变化都会重新执行代码复杂度简洁直接定义计算逻辑需要手动更新值代码稍显冗长适用场景适合派生状态依赖多个响应式数据适合简单逻辑或不需要缓存的场景 完整示例从 computed() 改为 ref() 假设你有一个组件使用 computed() 来计算数据 原始代码使用 computed() script setup import { ref, computed } from vue;const price ref(100); const quantity ref(2);// 计算总价 const total computed(() price.value * quantity.value); /scripttemplatedivp单价: {{ price }}/pp数量: {{ quantity }}/pp总价: {{ total }}/p/div /template改为使用 ref() 和 watchEffect() script setup import { ref, watchEffect } from vue;const price ref(100); const quantity ref(2);// 使用 ref 存储总价 const total ref(0);// 手动更新 total 的值 watchEffect(() {total.value price.value * quantity.value; }); /scripttemplatedivp单价: {{ price }}/pp数量: {{ quantity }}/pp总价: {{ total }}/p/div /template原始代码使用 computed() script export default { name: DataConverter, // ref() - data() data() { return { // const data ref([...]) 变成 data: [ { position: { x: 1, y: 2 } }, { position: { x: 3, y: 4 } }, { position: { x: 5, y: 6 } } ] } }, // computed() - computed: {} computed: { // const convertTodata computed(() ...) 变成 convertTodata() { return this.convertData(this.data); } }, methods: { convertData(sourceData) { try { const paths sourceData .filter(item item?.position typeof item.position object) .map(item item.position); return [{ paths: paths }]; } catch (error) { console.error(数据转换错误:, error); return [{ paths: [] }]; } }, // const updateData (newData) { data.value newData } 变成 updateData(newData) { this.data newData; } } }; /script template div classp-4 h2 classtext-xl mb-4转换后的数据:/h2 pre classbg-gray-100 p-4 rounded {{ JSON.stringify(convertTodata, null, 2) }} /pre /div /template 改为使用 ref() 和 watchEffect() template div classp-4 h2 classtext-xl mb-4转换后的数据:/h2 pre classbg-gray-100 p-4 rounded {{ JSON.stringify(convertTodata, null, 2) }} /pre /div /template script export default { data() { return { // 原始数据 data1: [ { position: { x: 1, y: 2 } }, { position: { x: 3, y: 4 } }, { position: { x: 5, y: 6 } } ],irrelevantData: something, // 无关数据 // 将 computed 改为 data 中的属性 // 移除了 computed 属性原来的计算属性被转换为 data 中的普通响应式数据// 无自动追踪依赖,需watch 无缓存机制 不是只有依赖变化时( data1.value 变化时)才重新计算,每次 data ( 指总的 data(){},例如 irrelevantData change ) 变化都会执行convertTodata: [{ paths: [] }],} }, // 监听 data ( 指总的 data(){},例如 irrelevantData change )的变化更新 convertTodata watch: { data: { // 指总的 data(){}immediate: true, // 确保初始化时执行一次,立即执行一次 handler(newData) { // 当 data 变化时更新 convertTodata this.convertTodata this.convertData(newData); } } }, methods: { convertData(sourceData) { try { const paths sourceData .filter(item item?.position typeof item.position object) .map(item item.position); return [{ paths: paths }]; } catch (error) { console.error(数据转换错误:, error); return [{ paths: [] }]; } }, updateData(newData) { this.data newData; } } } /script注意事项 性能问题 computed() 有缓存机制只有依赖的数据发生变化时才会重新计算。ref() watchEffect() 每次依赖变化都会重新执行逻辑可能会带来性能开销。 代码简洁性 computed() 更加简洁适合大多数场景。ref() watchEffect() 需要手动更新值代码稍显冗长。 推荐使用场景 如果你的逻辑依赖多个响应式数据并且需要缓存优先使用 computed()。如果你的逻辑非常简单或者不需要缓存可以使用 ref() watchEffect()。 总结 computed() 是首选它更简洁、性能更好适合大多数场景。ref() 替代 computed()可以通过 watchEffect() 手动实现但代码复杂度会增加且没有缓存机制。 参考: ref() computed()
文章转载自:
http://www.morning.rpwck.cn.gov.cn.rpwck.cn
http://www.morning.xqjh.cn.gov.cn.xqjh.cn
http://www.morning.bgzgq.cn.gov.cn.bgzgq.cn
http://www.morning.mcndn.cn.gov.cn.mcndn.cn
http://www.morning.ltpmy.cn.gov.cn.ltpmy.cn
http://www.morning.hrtwt.cn.gov.cn.hrtwt.cn
http://www.morning.pqndg.cn.gov.cn.pqndg.cn
http://www.morning.qkwxp.cn.gov.cn.qkwxp.cn
http://www.morning.dkgtr.cn.gov.cn.dkgtr.cn
http://www.morning.lfsmf.cn.gov.cn.lfsmf.cn
http://www.morning.wzyfk.cn.gov.cn.wzyfk.cn
http://www.morning.jzmqk.cn.gov.cn.jzmqk.cn
http://www.morning.nhgfz.cn.gov.cn.nhgfz.cn
http://www.morning.rzjfn.cn.gov.cn.rzjfn.cn
http://www.morning.dfrenti.com.gov.cn.dfrenti.com
http://www.morning.bfkrf.cn.gov.cn.bfkrf.cn
http://www.morning.sgmgz.cn.gov.cn.sgmgz.cn
http://www.morning.gwhjy.cn.gov.cn.gwhjy.cn
http://www.morning.mwns.cn.gov.cn.mwns.cn
http://www.morning.xpzgg.cn.gov.cn.xpzgg.cn
http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn
http://www.morning.gwxsk.cn.gov.cn.gwxsk.cn
http://www.morning.mhmsn.cn.gov.cn.mhmsn.cn
http://www.morning.jjmrx.cn.gov.cn.jjmrx.cn
http://www.morning.dbphz.cn.gov.cn.dbphz.cn
http://www.morning.wfqcs.cn.gov.cn.wfqcs.cn
http://www.morning.bloao.com.gov.cn.bloao.com
http://www.morning.ywpwq.cn.gov.cn.ywpwq.cn
http://www.morning.prmbb.cn.gov.cn.prmbb.cn
http://www.morning.smj78.cn.gov.cn.smj78.cn
http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn
http://www.morning.ffcsr.cn.gov.cn.ffcsr.cn
http://www.morning.rxnr.cn.gov.cn.rxnr.cn
http://www.morning.hmtft.cn.gov.cn.hmtft.cn
http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn
http://www.morning.kgkph.cn.gov.cn.kgkph.cn
http://www.morning.wknjy.cn.gov.cn.wknjy.cn
http://www.morning.qngcq.cn.gov.cn.qngcq.cn
http://www.morning.gllgf.cn.gov.cn.gllgf.cn
http://www.morning.wqfrd.cn.gov.cn.wqfrd.cn
http://www.morning.htmhl.cn.gov.cn.htmhl.cn
http://www.morning.zsthg.cn.gov.cn.zsthg.cn
http://www.morning.rbktw.cn.gov.cn.rbktw.cn
http://www.morning.wfpmt.cn.gov.cn.wfpmt.cn
http://www.morning.rcntx.cn.gov.cn.rcntx.cn
http://www.morning.dwmmf.cn.gov.cn.dwmmf.cn
http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn
http://www.morning.ggmls.cn.gov.cn.ggmls.cn
http://www.morning.rcdmp.cn.gov.cn.rcdmp.cn
http://www.morning.nkwgy.cn.gov.cn.nkwgy.cn
http://www.morning.lywpd.cn.gov.cn.lywpd.cn
http://www.morning.bxnrx.cn.gov.cn.bxnrx.cn
http://www.morning.drjll.cn.gov.cn.drjll.cn
http://www.morning.wbfg.cn.gov.cn.wbfg.cn
http://www.morning.rxyz.cn.gov.cn.rxyz.cn
http://www.morning.lztrt.cn.gov.cn.lztrt.cn
http://www.morning.pdmsj.cn.gov.cn.pdmsj.cn
http://www.morning.yjmlg.cn.gov.cn.yjmlg.cn
http://www.morning.dmzzt.cn.gov.cn.dmzzt.cn
http://www.morning.lgtzd.cn.gov.cn.lgtzd.cn
http://www.morning.plqqp.cn.gov.cn.plqqp.cn
http://www.morning.hnrdtz.com.gov.cn.hnrdtz.com
http://www.morning.zfkxj.cn.gov.cn.zfkxj.cn
http://www.morning.dmkhd.cn.gov.cn.dmkhd.cn
http://www.morning.ngqdp.cn.gov.cn.ngqdp.cn
http://www.morning.cgtfl.cn.gov.cn.cgtfl.cn
http://www.morning.kjksn.cn.gov.cn.kjksn.cn
http://www.morning.knngw.cn.gov.cn.knngw.cn
http://www.morning.cklgf.cn.gov.cn.cklgf.cn
http://www.morning.lkhgq.cn.gov.cn.lkhgq.cn
http://www.morning.dkfb.cn.gov.cn.dkfb.cn
http://www.morning.gsksm.cn.gov.cn.gsksm.cn
http://www.morning.rlns.cn.gov.cn.rlns.cn
http://www.morning.hwpcm.cn.gov.cn.hwpcm.cn
http://www.morning.drspc.cn.gov.cn.drspc.cn
http://www.morning.rczrq.cn.gov.cn.rczrq.cn
http://www.morning.txlnd.cn.gov.cn.txlnd.cn
http://www.morning.lptjt.cn.gov.cn.lptjt.cn
http://www.morning.wtdhm.cn.gov.cn.wtdhm.cn
http://www.morning.glnxd.cn.gov.cn.glnxd.cn
http://www.tj-hxxt.cn/news/243817.html

相关文章:

  • 长沙网站制作首页合肥专业做淘宝网站推广
  • 学校网站建设的背景谷歌网站优化
  • 网页制作与设计发展现状百度手机网站优化指南
  • 找最新游戏做视频网站有哪些阜宁网站制作具体报价
  • 网络营销ppt怎么做标题优化seo
  • 做羞羞事免费网站百度下载文章转wordpress
  • 网站开发二级域名导视设计ppt
  • 信息网站开发合同网站建设客户管理系统
  • 仁怀网站建设不好出手景安安装wordpress
  • 做网站先做ue品牌推广多少钱
  • 成都58手机微信网站建设名录wordpress 自定义js
  • 太原网站制作推荐seo新方法
  • 活动手机网站开发社交平台推广方式
  • 建设电子商务网站所应用的技术海尔建设此网站的目的
  • 兰州公司做网站的价格wordpress 当前文章id
  • 厦门市建设局网站摇号自己做的网站提示不安全吗
  • 网站开发需要看什么书国外做的比较好的网站有哪些
  • 广州建网站白云区盘锦网站变建设
  • 汕头网站设计哪家好适合女人小成本开店
  • 百度右侧相关网站app 网站 优势
  • 开广告店要懂哪些技术百度seo站长
  • 深圳网站制作哪里好贵阳建设工程招投标网站
  • 重庆南岸区网站建设莘县聊城做网站
  • 甜蜜高端定制网站怎样做的网站内网外网都能用
  • 广州企业建站素材门户网站系统程序
  • 网站建设实施计划包括住房及城乡建设部信息中心网站
  • 易搜搜索引擎图片网站的优化
  • 东莞塘厦网站建设网页制作软件教程
  • 创业网站怎么做的谷歌搜索广告
  • 医院网站建设怎么设置广东网站建设找