下面是我的RequestList.vue
组件
<template>
<ion-item v-for="request in requests" @click="showRequest(request)" :key="request.id"
text-wrap>
<ion-label>
<b>Name:</b> {{ request.event.name }}
<br>
<b>Venue:</b>{{ request.event.venue.name }}
<br>
<b>Date:</b> {{ request.event.date }}
</ion-label>
</ion-item>
</template>
<script>
import {useRouter} from 'vue-router'
import {IonItem, IonLabel} from '@ionic/vue'
import store from '@/store';
export default {
components: {
IonLabel,
IonItem
},
props: {
requests: Array
},
setup(props) {
const router = useRouter()
const showRequest= (request)=> {
console.log('request', props.request);
store.requests.setRequest(props.requests);
};
return {router, showRequest}
}
}
</script>
我的store/modules/requests.js
文件
import {computed, ref} from "vue";
const state = ref({
request: null
});
export function setRequest(request) {
state.value.request = request;
}
export const getRequest = computed(() => state.value.request);
我的Requests.vue
元件,其中我使用RequestList.vue
<template>
<ion-page>
<ion-header>
<ion-toolbar></ion-toolbar>
</ion-header>
<ion-content class="ion-padding-start ion-padding-end">
<ion-list-header>
<ion-label>
<b>Requests</b>
</ion-label>
</ion-list-header>
<div v-if="!loading">
<request-list :requests="requests" />
</div>
<div v-else>
<ion-spinner class="spin"></ion-spinner>
</div>
</ion-content>
</ion-page>
</template>
<script>
import { defineComponent } from 'vue'
import { IonContent, IonHeader, IonLabel, IonListHeader, IonPage, IonSpinner, IonToolbar } from '@ionic/vue'
import { reactive, toRefs } from '@vue/reactivity'
import { onMounted } from '@vue/runtime-core'
import RequestList from '../components/RequestList'
import firestoreService from '@/services/firestore'
export default defineComponent({
components: {
IonContent,
IonPage,
IonLabel,
IonHeader,
IonSpinner,
IonToolbar,
IonListHeader,
RequestList
},
setup() {
const state = reactive({
requests: [],
loading: false
})
onMounted(async () => {
state.loading = true
try {
state.requests = await firestoreService.getClaimableRequestsForCurrentUser()
} catch (e) {
console.log('error occurred fetching requests for current user', e)
} finally {
state.loading = false
}
})
return {
...toRefs(state),
}
}
})
</script>
我的问题是,在上面的RequestList.vue中,showRequest
处理程序将request
作为param发送,这是一个代理。这就是为什么store.requests.setRequest(props.requests)
在存储中设置一个代理。而我需要props.requests的值。
那我在这里怎么做呢?
3条答案
按热度按时间ig9co6j11#
获取代理的原始值有多种方法:
1.使用JSON字符串化/解析:
2.资产重组:
3.对象分配:
4.(我推荐的方式)Vue 3React性实用程序函数,请参见React性API:
bgtovc5b2#
最简单的方法可能是使用JSON stringify/parse
解构(
{..request}
或Object.assign({}, request))
)有时候也能工作,但只有当你有一个单一级别的代理时,而stringify/parse将对整个对象工作(只要确保你没有任何循环的对象值。aamkag613#
您通常可以使用toString()方法取得Proxy对象的值。
你也可以使用
toRaw
方法,但是这个方法必须被导入。toString
方法不需要被导入,所以它通常是最简单的。