【4.0】vue3中的属性

【4.0】vue3中的属性

【一】计算属性computed

  • export default中的computed属性

【1】单向计算属性computed

  • 案例:输入姓和名,拼接得到姓名(但是姓名反过来显示性和名就报错)

复制代码
  person.fullname=computed(function(){
  	return person.fistname+person.lastname
  })
  #由于person.fistname+person.lastname会变,所以函数会自己变

  <template>
    <div class="about">
      <h3>姓和名组合</h3>
      <h4>请输入您的姓:<input type="text" v-model="person.fistname"> </h4>
      <h4>请输入您的名:<input type="text" v-model="person.lastname"> </h4>
      <h4>您的全名:<input type="text" v-model="person.fullname"> </h4>
    </div>
  </template>

  <script>
  import {ref, reactive, computed} from "vue";

  export default {
    name:'AboutView',
    setup(){
      //定义姓名函数
      const person=reactive({fistname:'',lastname:''})
      
      //定义pserson的fullname属性
      person.fullname=computed(function(){
        return person.fistname+person.lastname
      })
      
      return {person}
    },
  }
  </script>

【2】双向计算属性set和get

  • 类似变量1=变量2+变量3,当变量2和3变化时候1肯定变,现在1变带着2和3变

  • get是后面变前面在变,set是后面变(根据值分解参数)

复制代码
  person.fullName = computed({
  	get() { 
  		return person.firstName + person.lastName},
  	set(value) {
  		person.firstName = value.slice(0, 1)
  		person.lastName = value.slice(1)}

  <template>
    <div class="about">
      <h3>姓和名组合</h3>
      <h4>请输入您的姓:<input type="text" v-model="person.fistname"> </h4>
      <h4>请输入您的名:<input type="text" v-model="person.lastname"> </h4>
      <h4>您的全名:<input type="text" v-model="person.fullname"> </h4>
    </div>
  </template>

  <script>
  import {ref, reactive, computed} from "vue";

  export default {
    name:'AboutView',
    setup(){
      //定义姓名函数
      const person=reactive({fistname:'',lastname:''})
      // const fullname=ref('')
      person.fullname=computed(
      { get(){
        return person.fistname+person.lastname},
        set(value){
           person.fistname=value.slice(0,1)
          person.lastname=value.slice(1)
          return person.fistname,person.lastname}
        })

      return {person}
    },}
  </script>

【二】监听属性watch

【1】总结watch(value,(newValue, oldValue))

  • export default中的watch方法,放入watch中的值或者变量可以被监听,只要变化就会触发该函数,并且有俩参数(修改前,修改后)

复制代码
  watch(height, (newValue, oldValue) => {
      console.log('height变化了', newValue, oldValue)
  })
复制代码
  watch([变量1, 变量2], (newValue, oldValue) => {
      console.log('1或2变化了', newValue, oldValue)
  })

【2】监听值类型

复制代码
  <template>
    <div class="about">
      <h3>监听值类型{{height}}</h3>
      <button @click="heightadd">点我增加身高</button>
    </div>
  </template>

  <script>
  import {ref, reactive, computed, watch} from "vue";

  export default {
    name:'AboutView',
    setup(){
      //监听值类型
      const height=ref(180)
      
      //监听函数
      watch(height,(newvalue,oldvalue)=>{
        console.log(newvalue)
        console.log(oldvalue)})
        
      //变化函数  
      function heightadd(){
        height.value++
      }
      return {count,add,user_info,changename,person,height,heightadd}
    },}
  </script>

【2】监听对象类型

复制代码
  <h3>监听对象类型{{user}}</h3>
  <button @click="changeuser">点我换人</button>

  //监听对象类型
  const user=reactive({username:'zhou',age:18})
  	watch(user,(newvalue,oldvalue)=>{
  	console.log(newvalue)
  	console.log(oldvalue)
  })
  function changeuser(){
  	user.username='zhou6'
  	user.age++
  }

【3】多个变量一起监听

复制代码
  const sum = ref(100)
  const msg = ref('很好')
  function changeValue(){
      sum.value++
      msg.value='不太好'
  }

  watch([sum, msg], (newValue, oldValue) => {
      console.log('sum或msg变化了', newValue, oldValue)
  })

【4】watchEffect函数

  • 不需要指定监听谁,只要变量在watchEffect内部使用了,当这个变量发生变化了,就会触发

  • wacth更适用于需要有条件监听数据变化的场景,computed更适合用于创建派生数据和性能优化,wactheffect会追踪函数内部的所有值,消耗比较大

  • 如果多个都同时变化,只会执行一次

    复制代码
    watchEffect(() => {
        const x1 = sum.value
        const x2 = person.name
        console.log('watchEffect配置的回调执行了')
    })
相关推荐
跨境数据猎手2 分钟前
跨境电商系统三大 Web 漏洞的防护:SQL 注入、XSS、CSRF
前端·sql·xss
冒险的豆子36 分钟前
Proxy & Vue 响应式(合并精简版,适合面试)
前端·javascript·vue.js
Java后端的Ai之路1 小时前
前端技术Vue-18-视图中的渲染
前端·javascript·vue.js
程序员海军7 小时前
用了两年多 GPT,我最近开始换模型了,还折腾了个求职避坑 Agent
前端·人工智能·后端
zttbee8 小时前
echarts图表tooltip色块失效
前端·javascript·echarts
excel9 小时前
IndexNow:让搜索引擎更快发现网站更新的主动通知协议
前端·后端·架构
子兮曰10 小时前
CSS 复现 23 种设计风格:从拟物到液态玻璃的成本阶梯与兜底写法【实战】
前端·css·视觉设计
虚无境10 小时前
如何用AI帮我写出实用的插件
前端·javascript·ai编程
柳杉11 小时前
从数字化到数智化:3D 可视化大屏的下一个五年
前端·ai编程·数据可视化
濮水大叔11 小时前
函数式与对象式:前端架构的两种成本曲线
vue.js·react.js·函数式编程