vue3子組件改變父組件的值(props)reactive和ref的區(qū)別及說(shuō)明
vue3子組件改變父組件的值(props)reactive和ref區(qū)別
其實(shí)關(guān)于子組件改變父組件的值,直接改是不可以的,我們一般通過(guò)綁定事件來(lái)改變,但是如果是reactive里面的復(fù)雜數(shù)據(jù)類型,我們只要不改變其內(nèi)存地址,是可以改變復(fù)雜數(shù)據(jù)類型里面的值的
下面看相關(guān)代碼,父子組件的層級(jí)如圖

父組件代碼
<template>
<h1>ref定義的值{{refNum}}</h1>
<h1>reactive定義的值{{reactiveNum}}</h1>
<h1>reactive定義的數(shù)組{{reactiveArr}}</h1>
<little
:refNum="refNum"
:reactiveNum="reactiveNum"
:reactiveArr="reactiveArr"
></little>
</template>
<script>
import little from './little'
import { toRefs, reactive, ref } from 'vue'
export default {
name: "big",
components: { little },
setup () {
const refNum = ref(0)// 不能直接通過(guò)子組件改變
const reactiveObj = reactive({
reactiveNum: 0, // 不能直接通過(guò)子組件改變
reactiveArr: [1, 2, 3] // 不改變內(nèi)存地址,可以通過(guò)子組件之間改變里面的值
})
return {
refNum,
...toRefs(reactiveObj)
}
}
}
</script>
<style>
</style>子組件
<template>
<button @click="changeRefVal">點(diǎn)我改變r(jià)ef的值</button>
<button @click="changeReactiveVal">點(diǎn)我改變r(jià)eactive的值</button>
<button @click="changeReactiveArr">點(diǎn)我改變r(jià)eactive的數(shù)組</button>
</template>
<script>
export default {
name: "little",
props: ["refNum", "reactiveNum", "reactiveArr"],
setup (props, context) {
// 改變 ref 的值
const changeRefVal = () => {
props.refNum++ // 報(bào)警告,不生效
}
// 改變 reactive 里面的值
const changeReactiveVal = () => {
props.reactiveNum++ // 報(bào)警告,不生效
}
// 改變 reactive 里面的數(shù)組
const changeReactiveArr = () => {
// props.reactiveArr = [1, 2, 3, 4] // 報(bào)警告,不生效
props.reactiveArr.push(4) // 生效
}
return {
changeRefVal,
changeReactiveVal,
changeReactiveArr
}
},
}
</script>
<style>
</style>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue.js實(shí)現(xiàn)可配置的登錄表單代碼詳解
這篇文章主要介紹了Vue.js實(shí)現(xiàn)可配置的登錄表單實(shí)例代碼詳解,文中給大家補(bǔ)充介紹了vue.js 全選與取消全選的實(shí)例代碼,需要的朋友可以參考下2018-03-03
在Vue-cli里應(yīng)用Vuex的state和mutations方法
今天小編就為大家分享一篇在Vue-cli里應(yīng)用Vuex的state和mutations方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
vuex分模塊后,實(shí)現(xiàn)獲取state的值
這篇文章主要介紹了vuex分模塊后,實(shí)現(xiàn)獲取state的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
一份超級(jí)詳細(xì)的Vue-cli3.0使用教程【推薦】
這篇文章主要介紹了一份超級(jí)詳細(xì)的Vue-cli3.0使用教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11
Vue-Cli配置代理轉(zhuǎn)發(fā)解決跨域問(wèn)題的方法
本文主要介紹了Vue-Cli配置代理轉(zhuǎn)發(fā)解決跨域問(wèn)題的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例
這篇文章主要介紹了vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
vue elementui簡(jiǎn)易側(cè)拉欄的使用小結(jié)
這篇文章主要介紹了vue elementui簡(jiǎn)易側(cè)拉欄的使用,增加了側(cè)拉欄,目的是可以選擇多條數(shù)據(jù)展示數(shù)據(jù),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
解決vue-cli webpack打包開啟Gzip 報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了vue-cli webpack打包開啟Gzip 報(bào)錯(cuò)問(wèn)題的解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
vue深入解析之render function code詳解
vue對(duì)大家來(lái)說(shuō)應(yīng)該再熟悉不過(guò)了,下面這篇文章主要給大家深入的解析了vue之render function code的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07

