微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:在 MERN 堆栈应用程序

如何解决错误:在 MERN 堆栈应用程序

我试图渲染图片等于所选颜色,但由于某种原因出现以下错误

未捕获的错误:RenderProductimage(...):没有返回任何内容 使成为。这通常意味着缺少 return 语句。或者 什么都不渲染,返回null。

这是我的功能

const {productData} = useContext(ProductContext);
const [products,setProducts] = useState([]);
const [color,setColor] = useState([]);

const ParsedColors = props => {
        return(
            props.product.color.map(col => {
                const parsed = JSON.parse(col)
                return(
                    <button name="color" value={parsed.value} style={{backgroundColor: `${parsed.value}`}} onClick={() => colorPicker([props.product._id,parsed.value])}/>
                )
            })
        )
    }

    const colorPicker = ([productId,colors]) => {
        setColor([productId,colors])
        if(products.some(product => product._id === productId)) {
            RenderProductimage(products.find(product => product._id === productId))
        }
    }

    const RenderProductimage = (product) => {
        return(
            product.imageFile?.map(image => {
                if(image.originalname.includes(color[1]?.substring(1))) {
                    return (
                        <img src={require(`./styles/images/${image.originalname}`).default} alt="product img" />
                    )
                }
            })    
        )
    }

这是我如何使用它:

{color.length > 0 ?
         <RenderProductimage />
        :
         <>
           {product.imageFile.map(image => {
             if(image.originalname.includes('def')) {
             return (
             <img src={require(`./styles/images/${image.originalname}`).default} alt="product img" />
             )
           }
         })}
        </>
       }
       <div className="product--Colors--Container">
          <ParsedColors product={product}/>
       </div>

所以条件有效并且包含('def')的图像正在渲染,但是当我选择颜色时出现错误

更新:

功能

const RenderProductimage = props => {
        if(products.some(product => product._id === props.productId)) {
            return(
                products.find(product => product._id === props.productId).imageFile?.map(image => {
                    if(image.originalname.includes(color[1].substring(1))) {
                        return (
                            <img src={require(`./styles/images/${image.originalname}`).default} alt="product img" />
                        )
                    }
                })
            )
        }
    }

使用:

 {color.length > 0 ?
                                            <RenderProductimage product={product} />
                                        :
                                        <>
                                            {product.imageFile.map(image => {
                                                if(image.originalname.includes('def')) {
                                                    return (
                                                        <img src={require(`./styles/images/${image.originalname}`).default} alt="product img" />
                                                    )
                                                }
                                            })}
                                        </>

颜色数据:

enter image description here

解决方法

更改您的 RenderProductImage 函数,如下所示:-

    const RenderProductImage = (props) => {
        return(
            props.product.imageFile?.map(image => {
                if(image.originalname.includes(color[1]?.substring(1))) {
                    return (
                        <img src={require(`./styles/images/${image.originalname}`).default} alt="product img" />
                    )
                }
            })    
        )
    }

现在您可以像下面那样访问 RenderProductImage:-

<RenderProductImage product={product} />

更改您的条件以呈现产品图像,如下所示:-

{(color.length > 0 && color[0] === product._id) ? ... }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。