vue3如何定義變量及ref、reactive、toRefs特性說明
vue3定義變量及ref、reactive、toRefs特性
1.ref() 函數(shù)
ref() 函數(shù)用來根據(jù)給定的值創(chuàng)建一個響應式的數(shù)據(jù)對象,傳入的為基本數(shù)據(jù)類型,例如字符串、數(shù)字、boolean 等,返回值是一個對象,這個對象上只包含一個 value 屬性
ref定義的變量,改變值要.value,而且在template中不用寫.value
<div>{{msg}}</div> <button @click="changeMsg()">修改msg</button> import {reactive,ref,toRefs} from 'vue' setup() { ?? ?//定義 ? ? const msg = ref('你好')? ? ? //修改 ? ? const changeMsg =()=>{ ? ? ? msg.value ='msg被改了' ? ? } ? ? //導出 ? ? return {? ? ? ?msg, ? ? ?changeMsg ? ? } ? }
2.reactive() 函數(shù)
reactive函數(shù)傳入的為引用類型,例如數(shù)組、對象等,但不能代理基本類型值,返回一個響應式的數(shù)據(jù)對象, 想要使用創(chuàng)建的響應式數(shù)據(jù)也很簡單,創(chuàng)建出來之后,在setup中return出去,直接在template中調(diào)用即可。
<div>{{state.msg}}</div> <button @click="changeMsg()">修改msg</button> import { reactive, ref, toRefs } from 'vue' ? ? ? ? setup() { ? ? ? ? ? ? //定義 ? ? ? ? ? ? const state = reactive({ ? ? ? ? ? ? ? ? msg: '你好', ? ? ? ? ? ? ? ? msg2:'hello' ? ? ? ? ? ? }) ? ? ? ? ? ? //修改 ? ? ? ? ? ? const changeMsg = () => { ? ? ? ? ? ? ? ? state.msg = 'msg被改了' ? ? ? ? ? ? } ? ? ? ? ? ? //導出 ? ? ? ? ? ? return { ? ? ? ? ? ? ? ? state, ? ? ? ? ? ? ? ? changeMsg ? ? ? ? ? ? } ? ? ? ? }
3.toRefs() 函數(shù)
toRefs() 函數(shù)可以將 reactive() 創(chuàng)建出來的響應式對象,轉(zhuǎn)換為普通的對象,相當于變成一個個的ref(),類似使用拓展用算符…的方法返回數(shù)據(jù)data
使用toRefs和reactive()區(qū)別在于可以直接使用msg屬性,不用state.
<div>{{msg}}</div> <button @click="changeMsg()">修改msg</button> import { reactive, ref, toRefs } from 'vue' ? ? ? ? setup() { ? ? ? ? ? ? //定義 ? ? ? ? ? ? const state = reactive({ ? ? ? ? ? ? ? ? msg: '你好', ? ? ? ? ? ? ? ? msg2:'hello' ? ? ? ? ? ? }) ? ? ? ? ? ? //修改 ? ? ? ? ? ? const changeMsg = () => { ? ? ? ? ? ? ? ? state.msg = 'msg被改了' ? ? ? ? ? ? } ? ? ? ? ? ? //導出 ? ? ? ? ? ? return { ? ? ? ? ? ? ? ?...toRefs(state), ? ? ? ? ? ? ? ? changeMsg ? ? ? ? ? ? } ? ? ? ? }
vue3定義變量
1.const 聲明變量
特性:聲明為一個常量,不能被修改,不可以再次賦值,它的指向是不可以改變的,只能指向某處固定區(qū)域,不能再指向其它地方
要求:
① 聲明后必須初始化賦值,如:const name='aaa',不可以 const name;
② 常量的含義是指向的對象不能修改,但是可以修改對象中的屬性
所以類似const userName = ref('張三')
userName.value = '李四'
實際上是在給對象userName的屬性重新賦值
2.reactive和ref
都是用作定義基本變量的
ref 定義簡單的,reactive一般定義數(shù)組和對象
ref 有.value屬性,reactive沒有
3.provide與inject
不用再一層一層的傳遞數(shù)據(jù)
provide可以向所有子孫組件提供數(shù)據(jù)以及提供修改數(shù)據(jù)的方法,子孫組件用inject使用數(shù)據(jù)。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue3新屬性之css中使用v-bind的方法(v-bind?in?css)
這篇文章主要介紹了Vue3新屬性css中使用v-bind(v-bind?in?css)的方法,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01解決Antd 里面的select 選擇框聯(lián)動觸發(fā)的問題
這篇文章主要介紹了解決Antd 里面的select 選擇框聯(lián)動觸發(fā)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10vue cli3.0 引入eslint 結合vscode使用
這篇文章主要介紹了vue cli3.0 引入eslint 結合vscode使用,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05vue2前端使用axios發(fā)起post請求后端(springboot)接收不到值解決辦法
這篇文章主要介紹了vue2前端使用axios發(fā)起post請求后端(springboot)接收不到值解決辦法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2024-03-03vue-element-admin中node-sass換成dart-sass,安裝依賴報code?128多種問題的解決
這篇文章主要介紹了vue-element-admin中node-sass換成dart-sass,安裝依賴報code?128多種問題的解決方法,本文給大家分享問題原因分析及解決方法,需要的朋友可以參考下2023-02-02Vue 路由組件向app.vue主文件傳值的方式(兩種常見方式)
在Vue.js中,可以使用路由傳參的方式向App.vue主頁面?zhèn)鬟f數(shù)據(jù),有多種方法可以實現(xiàn)這一目標,本文結合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2023-11-11