首页 > 其他分享 >组合式vue

组合式vue

时间:2023-03-08 10:13:33浏览次数:55  
标签:组合式 count vue const value reactive state ref

vue组合式风格

setup

所有使用到的响应式状态都应在setup函数里面定义。

<script>
// `setup` 是一个专门用于组合式 API 的特殊钩子函数
  setup() {
    const state = reactive({ count: 0 })
    // 暴露 state 到模板
    return {
      state
    }
  }
</script>

注意这里state是一个响应式对象,在该对象里可以定义多个成员,每个成员被修改时都会触发响应式渲染。

当状态非常多时这种定义方法会非常繁琐,在script标签中加上setup可以简化操作。

<script setup>
import { reactive } from 'vue'

const state = reactive({ count: 0 })

function increment() {
  state.count++
}
</script>

声明响应式状态

可以使用reactive()创建响应式对象。

但是注意声明响应式对象必须使用const

reactive的缺陷:

  • 仅对集合类型有效,对原始数据类型无效。
  • 必须保持对响应式对象的相同引用,才能保证响应性不会丢失。

使用ref()可以创建任何值类型(包含原始数据类型)的响应式ref。

const count = ref(0)

console.log(count) // { value: 0 }
console.log(count.value) // 0

count.value++
console.log(count.value) // 1

用value表示其值或者对其进行修改。当在模板中ref作为顶层属性被使用的时候,他会自动解包。不需要使用value

<template>
  <div>
    这是主组件
    <div @click="solveRec">reactive:{{ rec.value }}</div>
    <div @click="solveRef">ref:{{ re }}</div>
  </div>

</template>

<script setup>
import {reactive,ref} from 'vue'

const rec = reactive({value:0})
const re  = ref(0)

const solveRef = () => {
    console.log("solveRef Called")
    test(re)
}
const solveRec = () => {
    console.log("solveRec Called")
    test(rec)
}
const test = (e) => {
    console.log("test Called",e.value)
    e.value = 3;
}
</script>

当ref被签到在一个响应式对象中,被当作属性访问时,他会自动解包。

const count = ref(0)
const state = reactive({
  count
})

console.log(state.count) // 0

state.count = 1
console.log(count.value) // 1

计算属性

与选项式中的计算属性类似。但是写法稍有区别。

const publishedBooksMessage = computed(() => {
  return author.books.length > 0 ? 'Yes' : 'No'
})

<span>{{ publishedBooksMessage }}</span>

计算属性会基于其使用到的响应式依赖进行缓存,只有在其依赖被更新的时候其值才会呗重新计算。

生命周期钩子

与选项式类似,当你在组合式用法中需要根据生命周期执行一些函数时,可以使用生命周期钩子。

<script setup>
import { onMounted } from 'vue'

onMounted(() => {
  console.log(`the component is now mounted.`)
})
</script>

类似的还有onMounted,onUpdated,onUnmounted

生命周期钩子详情

vue生命周期

组件生命周期图示

侦听器

在很多情况下,你可能想要在某个响应式状态被修改时进行一些副作用操作,这时候可以用watch函数来监听这种变化并进行一些操作。

<script setup>
import { reactive, ref, watch } from 'vue'

const question = ref('')
const answer = reactive({new:'',old:''})

watch(question, async (newQuestion, oldQuestion) => {
  answer.new=newQuestion
    answer.old=oldQuestion
}
)
</script>

<template>
  <p>
    <input v-model="question" />
  </p>
  <p>old:{{ answer.old }}<br/>new:{{ answer.new }}</p>
</template>

这份代码监听了question的变化,并且根据question的变化改变了anwser

访问dom

在某些情况下可能需要直接对dom的操作。

使用ref可以获取到该dom。为模板中的dom节点声明一个ref属性,然后通过ref钩子就可以获取到该dom。

<script setup>
import { ref, onMounted } from 'vue'

const input = ref(null)

onMounted(() => {
  input.value.focus()
})
</script>

<template>
  <input ref="inputref" />
</template>

注意这里的ref的引用名字必须为inputref,即需要与模板中声明的ref对应。

标签:组合式,count,vue,const,value,reactive,state,ref
From: https://www.cnblogs.com/wxyww/p/17190997.html

相关文章

  • 在Vue中体验LeanCloud无后台轻量级数据存储服务
    ......
  • Vue3 使用 vant中的swipe,添加左右箭头切换轮播
    vant中的 swipe 是带有左右箭头切换轮播方法的,只不过文档中没有相关的案例。  我这边使用的是vue3ts写的这个功能。页面部分   定义一个方法,ref="swi......
  • vue3:setup语法糖使用教程
    setup语法糖简介直接在script标签中添加setup属性就可以直接使用setup语法糖了。使用setup语法糖后,不用写setup函数;组件只需要引入不需要注册;属性和方法也不需要再返回,可......
  • antdesign-vue 遇到的一些问题
     问题:点击展开没反应 解决办法::expanded-row-keys.sync="expandedRowKeys"去掉即可......
  • Vue el-form回车想提交表单数据,但会刷新页面的解决办法
    原因W3C标准中有如下规定Whenthereisonlyonesingle-linetextinputfieldinaform,theuseragentshouldacceptEnterinthatfieldasarequesttosubmi......
  • vue2与vue3不同点:opitons api 与cmposition api
    vue2:optionsapi采用的是命令式编程,而vue3组合式api采用的是函数式编程,两者存在很大的差异,vue3更灵活,难度也更大。script语法糖,vue3可以通过导入函数的方式来定义响应......
  • vue-router的笔记
    路由:hash地址与组件之间的对应关系SPA:单页面应用程序前端路由的工作方式1、用户点击了页面上的路由链接2、导致了url地址栏的hash值变化3、前端路由监听到了hash地址......
  • vue生命周期以及如何将axios挂载到vue的原型链上
    生命周期组件的生命周期是指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行 ......
  • vue组件之间通信以及混入
    子组件向父组件共享数据使用自定义事件父向子用自定义属性兄弟之间用eventbus组件的$nextTick(cb)方法,会把cb回调到下一个dom更新周期之后执行Vue2中非父子组件之间用......
  • vuex笔记
    Vuex在开发中,我们会的应用程序需要处理各种各样的数据,这些数据需要保存在我们应用程序中的某一个位置,对于这些数据的管理我们就称之为是状态管理src/store/index.js......