在ReactJs中根据动态路径加载图像

时间:2017-07-26 18:30:55

标签: json reactjs ecmascript-6 redux react-redux

我试图在购物车中显示图像但我没有出现。我必须导入每个图像吗?我知道我的路径很好,因为它之前有用。我认为我的product.js文件可能有问题,但我无法弄清楚。

这是我的Product.js

import React, { Component, PropTypes } from 'react';

class Product extends Component {
handleClick = () => {
    const { id, addToCart, removeFromCart, isInCart } = this.props;

    if (isInCart) {
        removeFromCart(id);
    } else {
        addToCart(id);
    }
}

render() {
    const { name, price, currency, image, url, isInCart } = this.props;

    return (
        <div className="product thumbnail">
            <img src={image} alt="product" />
            <div className="caption">
                <h3>
                    <a href={url}>{name}</a>
                </h3>
                <div className="product__price">{price} {currency}</div>
                <div className="product__button-wrap">
                    <button
                        className={isInCart ? 'btn btn-danger' : 'btn btn-primary'}
                        onClick={this.handleClick}>
                        {isInCart ? 'Remove' : 'Add to cart'}
                    </button>
                </div>
            </div>
        </div>
    );
}
}

Product.propTypes = {
id: PropTypes.number.isRequired,
name: PropTypes.string.isRequired,
price: PropTypes.number,
currency: PropTypes.string,
image: PropTypes.string,
url: PropTypes.string,
isInCart: PropTypes.bool.isRequired,
addToCart: PropTypes.func.isRequired,
removeFromCart: PropTypes.func.isRequired,
}

export default Product;

数据来自此产品.js

const data = [
{
id: 1,
name: 'Reggae Blaster',
price: 10,
currency: 'GOLD',
image: '../assets/blaster_1.png'
},
{
id: 2,
name: 'Juicy Blaster',
price: 10,
currency: 'GOLD',
image: 'images/02.jpg'
},
{
id: 4,
name: 'Full Body Reggae Armor',
price: 20,
currency: 'GOLD',
image: 'images/04.jpg'
},
{
id: 6,
name: 'Reggae Spikes Left',
price: 5,
currency: 'GOLD',
image: 'images/06.jpg'
},
{
id: 5,
name: 'Reggae Spikes Right',
price: 5,
currency: 'GOLD',
image: 'images/05.jpg'
},
{
id: 3,
name: 'Black Full Body Reggae Armor',
price: 20,
currency: 'GOLD',
image: 'images/03.jpg'
}
];

export default data;

我正在提取所有数据,但图片不会显示

3 个答案:

答案 0 :(得分:16)

假设您使用的是webpack,则需要导入图像才能将其显示为

<img src={require('images/06.jpg')} alt="product" />

现在你的图像数据是动态的, 直接指定导入路径,如

<img src={require(image)} alt="product" />

不起作用。

但是,您可以使用模板文字(如

)导入图像
<img src={require(`${image}`)} alt="product" />

所以你的代码看起来像

render() {
    const { name, price, currency, image, url, isInCart } = this.props;

    return (
        <div className="product thumbnail">
            <img src={require(`${image}`)} alt="product" />
            <div className="caption">
                <h3>
                    <a href={url}>{name}</a>
                </h3>
                <div className="product__price">{price} {currency}</div>
                <div className="product__button-wrap">
                    <button
                        className={isInCart ? 'btn btn-danger' : 'btn btn-primary'}
                        onClick={this.handleClick}>
                        {isInCart ? 'Remove' : 'Add to cart'}
                    </button>
                </div>
            </div>
        </div>
    );
}

P.S。还要确保图像路径相对于要导入它们的文件。

答案 1 :(得分:0)

您必须将这些图像放在捆绑应用程序所在的文件夹中。

答案 2 :(得分:0)

img src={require(${filePath})} - 在职的 您还需要添加默认值以获取确切的 URL

img src={require(`${filePath}.default`)}