VueJS 中的无效 prop:类型检查失败错误
2019-06-13
6285
我正在尝试使用名为 CardRenderer.vue 的组件,该组件使用对象数组渲染卡片。我一次又一次地使用同一个组件来渲染数据。我遇到此错误“[Vue 警告]:无效 prop:当我尝试从组件传递 prop 时,prop“renderData”的类型检查失败。
我尝试传递不同的值和不同的类型,但没有成功。
这是代码:
CardRenderer.vue
<template lang="html">
<div>
<b-container class="bv-example-row">
<b-row v-for="(row, i) of rows" v-bind:key="i">
<b-col v-for="(item, j) of row" v-bind:key="j" >
<!-- you card -->
<b-card
:title="item.title"
img-src="item.icon"
img-alt="Image"
img-top
tag="article"
style="max-width: 20rem;"
class="mb-2"
>
<b-card-text>
<h1>{{item.name}}</h1>
<pre>{{item.description}}</pre>
</b-card-text>
<b-button :href="'/dashboard/'+item.name" variant="primary">More</b-button>
</b-card>
</b-col>
</b-row>
</b-container>
</div>
</template>
<script lang="js">
export default {
name: 'CardRenderer',
props: {
renderData: []
},
data() {
return {
rows: null
}
},
mounted() {
const itemsPerRow = 3
let rowss = []
let arr = this.renderData
// eslint-disable-next-line
// console.log(this.renderData)
for (let i = 0; i < arr.length; i += itemsPerRow){
let row = []
for (let z = 0; z < itemsPerRow; z++) {
row.push(arr[z])
}
rowss.push(row)
}
this.rows = rowss
// eslint-disable-next-line
console.log(this.rows)
},
methods: {
},
computed: {
// rows() {
// }
}
}
</script>
<style scoped>
</style>
CardGrouper.vue:
<template lang="html">
<div class = "full" >
<div class="h-50" style=" background-color: #C8544F">
<h1 align="center">{{$store.getters.responseAPI.title}} </h1>
<CardRenderer :renderData=this.$store.getters.responseAPI.apps />
</div>
</div>
</template>
<script>
import CardRenderer from "./CardRenderer.vue"
/* eslint-disable */
export default {
name: 'CardGrouper',
components: {
CardRenderer
},
props: [],
mounted() {
},
data() {
return {
}
},
methods: {
},
computed: {
}
}
</script>
<style scoped >
.full{
width: 100vw;
height: 90vh;
background: linear-gradient(to bottom, Red 30%, white 50%);
}
</style>
Something.vue
<template lang="html">
<!-- <h1>Something</h1> -->
<CardRenderer :renderData=valObj />
</template>
<script lang="js">
import CardRenderer from './CardRenderer'
export default {
name: 'something',
components: {
CardRenderer
},
props: [],
data() {
return {
valObj: []
}
},
mounted() {
let key = this.findUrl()
let value = this.$store.getters.responseAPI.apps.filter((elem) => {
if(elem.name == key) return elem.apps
})
if (value.length > 0)
this.valObj = value[0].apps
//eslint-disable-next-line
console.log(this.valObj)
},
methods: {
findUrl() {
let url = window.location.pathname.split("/").slice(-1)[0];
return url
}
},
computed: {
}
}
</script>
<style scoped >
.something {
}
</style>
这是我作为 prop 传递的数据
Something.vue
Something.vue
的某处生成了错误。
我正在将对象数组作为 prop 传递。
我该如何纠正此错误,使其正常工作。
3个回答
将
renderData
类型设置为
Array
,并将默认值设置为
[]
:
props: {
renderData: {
type: Array,
default: () => []
}
}
Sajib Khan
2019-06-13
看来您正在将
renderData
属性定义为数组
[]
,但可能正在向其传递一个对象或其他东西。
要么简化它并执行...
props: ['renderData']
或者,如果您正在向其传递一个对象,请执行..
props: {
renderData: {
type: Object,
}
}
如果它是一个对象数组,请执行..
props: {
renderData: {
type: Array,
default: () => [{}];
}
skribe
2019-06-13
仅用于文档。
// Object with a default value
propE: {
type: Object,
// Object or array defaults must be returned from
// a factory function
default: function () {
return { message: 'hello' }
}
},
这在 vue prop 文档
Edgar Olivar
2020-03-27