【发布时间】:2020-12-12 19:19:53
【问题描述】:
我是 React 和 JavaScript 的初学者。我一直在按照 YouTube 上的教程和我自己的免费代码营学习它们。所以我的问题可能会令人困惑,但我会尽力描述我的问题。
我一直在尝试通过遵循 YouTube 教程并添加我自己的代码来编写一些 React 电子商务网站。但是我在返回对象内的数组的每个值时遇到了一些问题。这就是我的数据的样子。
products: [
{
_id: '001',
image: '/images/v1.jpg',
category: 'Korea',
name: 'Vivid',
artist: 'ADOY',
price: 60,
rating: 4.5,
numReview: 10,
tracklist: [
"Lemon", "Porter", "Pool", "Someday", "Domino", "Swim", "Ever", "Ugly", "Moondance", "Away"
]
},
{
_id: '002',
image: '/images/v2.jpg',
category: 'Korea',
name: 'Catnip',
artist: 'ADOY',
price: 40,
rating: 4.0,
numReview: 7
},...
我已经有一个 map 函数,它确实从另一个组件返回对象的每个值(从 YouTube 教程复制)
import React from 'react';
import data from '../data';
import { Link } from 'react-router-dom';
function HomeScreen (props) {
return <ul className="products">
{data.products.map(product =>
<li>
<div className="product">
<Link to={'/product/' + product._id}>
<img src={product.image} alt="vinyl" className="product-image" />
</Link>
<div className="product-album">
<Link to={'/product/' + product._id}>{product.name}</Link>
</div>
<div className="product-artist">{product.artist}</div>
<div className="product-price">{product.price}</div>
<div className="product-rating">{product.rating} Stars ({product.numReview} reviews)</div>
</div>
</li>
)}
</ul>
}
export default HomeScreen;
现在在我自己的另一个组件中。我一直在尝试使我的 tracklist 从数组中显示此组件中的有序列表
import React from 'react'
import data from '../data';
import { Link } from 'react-router-dom';
function ProductScreen (props) {
const product = data.products.find(x => x._id === props.match.params.id);
return <div>
<div className="details">
<div className="details-image">
<img src={product.image} alt="vinyl" />
</div>
<div className="details-info">
<ul>
<li>
<h1>{product.name}</h1>
</li>
<li>
{product.artist}
</li>
<li>
{product.rating} stars ({product.numReview} reviews)
</li>
<li>
<b>Price: ${product.price}</b>
</li>
<li>
Tracklist: <ol>
{product.tracklist}
</ol>
</li>
</ul>
</div>
</div>
}
export default ProductScreen;
但结果是我只得到 1 个包含所有值的列表 [1]:https://i.stack.imgur.com/KCBMl.png
根据我的初学者知识和理解,到目前为止我尝试的是在这个组件中编写一个这样的函数
const trackListing = () => {
data.products.tracklist.map(track =>
<li>{track}</li>
)}
但它不会在网站上返回任何结果。谁能告诉我如何解决这个问题?或者我应该学习什么来解决这个问题?对不起,我的英语不好。谢谢!
【问题讨论】:
-
了解更多不同的Array方法,你就会知道你不需要find()但你需要使用filter()。
-
你在正确的轨道上(呵呵),但你需要
product.tracklist.map( .... )。因为data.products是一个数组,因此没有.tracklist属性。 -
在你的trackListing函数中,你没有返回结果,好像缺少“return”关键字
标签: javascript arrays json reactjs object