【发布时间】:2020-10-31 04:51:57
【问题描述】:
我正在使用 vue 并且来自 react 背景。 React 有一个称为 .map 的方法,如果您将数组作为 props 传递,那么它将多次渲染该组件,具体取决于数组中的项目数并从索引中提取每个数据。像这样:
function App() {
const classes = useStyles();
const [finance, setFinance] = useState([]);
useEffect(() => {
axios
.all([
axios.get(
`https://cloud.iexapis.com/stable/stock/market/collection/list?collectionName=gainers&token=XXXXXXXXXXXXXXXXXXXXX`
),
])
.then((res) => {
setFinance(res[0].data);
})
.catch((err) => {
console.log(err);
});
}, []);
const cardList = finance.map((company, index) => (
<Grid item xs={10} sm={5} md={4} lg={3} xl={2}>
<Cards company={company} index={index} />
</Grid>
));
基本上,finance 是存储数组中所有数据的状态。我将company 的数据作为道具传递给Cards 组件。这很有效,我正在尝试在 vue 中复制这种效果。到目前为止,这是我的代码:
<template>
<v-container>
<v-row align="start" justify="center">
<v-col xs="12" sm="6" md="4" lg="3">
<cards :crypto="crypto[0]" />
</v-col>
</v-row>
</v-container>
</template>
<script>
import cards from "@/components/cards.vue";
export default {
data() {
return {
crypto: []
};
},
components: { cards },
mounted() {
this.axios
.get(
"https://min-api.cryptocompare.com/data/top/totalvolfull?limit=20&tsym=USD&api_key=xxxxxxxxxxxxxxxxxxx"
)
.then(response => {
this.crypto = response.data.Data;
console.log(response.data.Data);
})
.catch(error => console.log(error));
}
};
</script>
如您所见,crypto 是我在 Vue 中的 cards 组件中传递的数据属性。我想做的与我对 React 所做的完全相同,而我将一个对象数组传递给一个组件,并且组件根据数组的对象数量多次渲染,同时从相应的获取数据指数。我尝试执行 v-for 指令,但我认为这只适用于列表?任何帮助表示赞赏。
注意: 这是我的 Vue 项目中用于上下文的 Card 组件:
<template>
<v-card class="mx-auto" max-width="344" outlined>
<v-list-item three-line>
<v-list-item-content>
<div class="overline mb-4">{{ crypto.CoinInfo.FullName }}</div>
<v-list-item-title class="headline mb-1">{{
crypto.CoinInfo.Name
}}</v-list-item-title>
<v-list-item-subtitle
>Price: {{ crypto.DISPLAY.USD.PRICE }}<br />Change :
{{ crypto.DISPLAY.USD.CHANGEDAY }}</v-list-item-subtitle
>
</v-list-item-content>
<!-- <v-list-item-avatar tile size="80" -->
<img
style="height: 80px;"
:src="`https://www.cryptocompare.com/${crypto.CoinInfo.ImageUrl}`"
/>
<!-- </v-list-item-avatar> -->
</v-list-item>
<v-card-actions>
<v-btn text>Save</v-btn>
<v-btn text>Check</v-btn>
</v-card-actions>
</v-card>
</template>
<script>
export default {
props: {
crypto: Object
}
};
</script>
【问题讨论】:
-
"React 有这个方法叫做 .map" - 没有。
finance是一个普通数组值,它有 builtinmapmethod。你可以在 vue.js 中完全一样地使用它。 -
部分正确,使用渲染函数时只能在Vue的vdom中使用
.map而不是<template>
标签: javascript arrays reactjs vue.js vuejs2