woocommerce商店的最终应用程序,但是我在渲染数组的第一个图像时遇到问题 当我console.log(images.src)时,我看到图像的URL列表,但是在img src =中它返回:TypeError:无法读取未定义的属性'src' 我将非常感谢您帮助我正确映射图像。 这是我的代码:
class App extends React.Component {
constructor(props) {
super(props);
this.getPosts = this.getPosts.bind(this);
this.state = {
posts : [],
images: []
};
}
getPosts = async () => {
let res = await api.get("products", {
per_page: 20,
})
let { data } = await res;
this.setState({ posts: data });
}
componentDidMount = async () => {
await this.getPosts();
};
render() {
const { posts } = this.state;
const { images } = this.state
return(
<div>
<Head>
<title>Онлайн магазин KIKI.BG</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<React.Fragment >
{posts.map((posts, index ) => {
{
posts.images.map((images, subindex) =>
console.log(images.src),
<img src={images[0].src} />
)}
return (
<div>
<h1>{posts.name}</h1>
<h2>{posts.price}</h2>
</div>
)})}
</React.Fragment>
</div>
)
}
}
export default App;
答案 0 :(得分:0)
{posts.map((posts, index ) => {
{
posts.images.src.map((image, subindex) =>
<img src={image.src} />
)}
return (
<div>
<h1>{posts.name}</h1>
<h2>{posts.price}</h2>
</div>
)
})}
答案 1 :(得分:0)
好吧,console.log(images.src) i see the list of urls of the images
没有任何意义。images
是数组。那么images[0]
应该是上面带有属性src
的数据的图像吗?顺便说一句,这段代码中的很多东西都是错误的。
getPosts
绑定在构造函数中的getPosts
函数(通过类属性)(getPosts)。不需要绑定的BTW根本不在这里,它不称为回调。await res
之后打电话给api.get()
...不只是await api.get()
吗?当您执行类似await
之类的操作时,通常会在提取时使用另一个await response.json()
。key
属性,这是错误的。您应该在其中放置一些唯一的ID(URL fe ?,如果不相同,则为id),以正确渲染组件。那是我的代码:
import { Component, Fragment } from 'react';
class App extends Component {
static defaultProps = {
onError: console.error;
};
state = {
posts: [],
images: [],
loading: false,
};
// This could be done with hooks much better tho...
async componentDidMount () {
this.setState({ loading: true });
try {
await this._fetchData();
}
catch (error) {
this.props.onError(error); // Or something rendered in state.error?
}
finally {
this.setState({ loading: false });
}
}
render () {
const { images, posts, loading } = this.state;
if (!images.length) {
return <div>No data.</div>;
}
if (loading) {
return <div>Loading</div>;
}
const postBoxes = posts.map((post, index) => {
const image = images[index];
// Because you don't know, if that specific image is there... if this are your data..
const imageElement = image ?
<img src={image.src} alt="dont know" /> :
null;
const { name, price } = post;
// If name is unique, otherwise some id.
return (
<Fragment key={name} >
{imageElement}
<h2>{name}</h2>
<h3>{price}</h3>
</Fragment>
);
});
return (
<div>
<Head>
<title>Онлайн магазин KIKI.BG</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<Fragment>
{postBoxes}
</Fragment>
</div>
);
}
async _fetchData () {
const { data } = await api.get('products', { per_page: 20 });
const { posts, images } = data;
this.setState({ posts, images });
}
}
export default App;
答案 2 :(得分:0)
如果console.log(images.src)
->提供图像列表。
然后
<img src={images.src[0]}/>
->应该可以解决问题。
可能是,确定要添加一个空检查。
images.src[0] && <img src={images.src[0]}/>