vue3中的reactive函數(shù)聲明數(shù)組方式
reacitve函數(shù)如何聲明一個(gè)響應(yīng)式數(shù)組
如以下案例
<template>
? <div>
? ? ? <div v-for="item in arr" :key="item">?
? ? ? ? ? {{item}}
? ? ? </div>
? ? ? ? <button @click="change">change</button>
? </div>
</template><script>
? import { defineComponent, reactive,ref } from 'vue';
? export default defineComponent({
? ? setup(props,context) {
? ? ? let arr = reactive([])
? ? ? function change(){
? ? ? ? console.log("change...");
? ? ? ? let newArr = [1,2,3]
? ? ? ? arr = newArr
? ? ? }
? ? ??
? ? ? return{
? ? ? ? arr,
? ? ? ? change
? ? ? }
? ? },
? });
</script>
<style scope></style>點(diǎn)擊change按鈕,發(fā)現(xiàn)并沒(méi)有什么變化,這是因?yàn)閍rr = newArr這行代碼讓arr失去了響應(yīng)式。
解決辦法
使用ref函數(shù)
?setup(props,context) {
? ? ? let arr = ref([])
? ? ? function change(){
? ? ? ? console.log("change...");
? ? ? ? let newArr = [1,2,3]
? ? ? ? arr.value = newArr
? ? ? }
? ? ??
? ? ? return{
? ? ? ? arr,
? ? ? ? change
? ? ? }
? ? },使用數(shù)組的push方法
?setup(props,context) {
? ? ? let arr = reactive([])
? ? ? function change(){
? ? ? ? console.log("change...");
? ? ? ? let newArr = [1,2,3]
? ? ? ? arr.push(...newArr)
? ? ? }
? ? ??
? ? ? return{
? ? ? ? arr,
? ? ? ? change
? ? ? }
? ? },創(chuàng)建一個(gè)響應(yīng)式對(duì)象,對(duì)象的屬性是數(shù)組
<template>
? <div>
? ? ? <div v-for="item in arr.list" :key="item">?
? ? ? ? ? {{item}}
? ? ? </div>
? ? ? ? <button @click="change">change</button>
? </div>
</template><script>
? import { defineComponent, reactive,ref } from 'vue';
? export default defineComponent({
? ? setup(props,context) {
? ? ? let arr = reactive({
? ? ? ? list:[]
? ? ? })
? ? ? function change(){
? ? ? ? console.log("change...");
? ? ? ? let newArr = [1,2,3]
? ? ? ? arr.list = newArr
? ? ? }
? ? ??
? ? ? return{
? ? ? ? arr,
? ? ? ? change
? ? ? }
? ? },
? });
</script>使用reactive包裹數(shù)組賦值
需求
將接口請(qǐng)求到的列表數(shù)據(jù)賦值給響應(yīng)數(shù)據(jù)arr
代碼
const arr = reactive([]);
const load = () => {
? const res = [2, 3, 4, 5]; //假設(shè)請(qǐng)求接口返回的數(shù)據(jù)
? // 方法1 失敗,直接賦值丟失了響應(yīng)性
? // arr = res;
? // 方法2 這樣也是失敗
? // arr.concat(res);
? // 方法3 可以,但是很麻煩
? res.forEach(e => {
? ? arr.push(e);
? });
};方法1:vue3 使用 proxy,對(duì)于對(duì)象和數(shù)組都不能直接整個(gè)賦值;
方法2:concat 不改變?cè)瓟?shù)組
// 方法4
const state = reactive({
? arr: []
});
state.arr = [1, 2, 3]
// 方法5
const state = ref([])
state.value = [1, 2, 3]
// 方法6
const arr = reactive([])
arr.push(...[1, 2, 3])
// 亦或者
arr.length = 0 // 清空原數(shù)組
arr.push(...res) // 解構(gòu)然后push進(jìn)去以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項(xiàng)目依賴升級(jí)報(bào)錯(cuò)處理方式
這篇文章主要介紹了vue項(xiàng)目依賴升級(jí)報(bào)錯(cuò)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue選項(xiàng)卡組件的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了vue選項(xiàng)卡組件的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
解決vue加scoped后就無(wú)法修改vant的UI組件的樣式問(wèn)題
這篇文章主要介紹了解決vue加scoped后就無(wú)法修改vant的UI組件的樣式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
defineProps宏函數(shù)不需要從vue中import導(dǎo)入的原因解析
這篇文章主要介紹了defineProps宏函數(shù)不需要從vue中import導(dǎo)入的原因解析,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
Vue3.0實(shí)現(xiàn)圖片預(yù)覽組件(媒體查看器)功能
最近項(xiàng)目中有個(gè)場(chǎng)景,一組圖片、視頻、音頻、文件數(shù)據(jù),要求點(diǎn)擊圖片可以放大預(yù)覽,左右可以切換音視頻、文件,支持鼠標(biāo)及各種鍵控制?縮放,左右旋轉(zhuǎn),移動(dòng)等功能,這篇文章主要介紹了Vue3.0實(shí)現(xiàn)圖片預(yù)覽組件(媒體查看器),需要的朋友可以參考下2023-12-12
Vue3中使用ref標(biāo)簽對(duì)組件進(jìn)行操作方法
這篇文章主要介紹了Vue3中使用ref標(biāo)簽對(duì)組件進(jìn)行操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04

