如何在 require 方法中使用路徑與node.js 反應?
P粉617237727
P粉617237727 2023-09-09 09:58:49
0
2
406

我正在嘗試使用 require() 方法將圖片的路徑貼到 img 標記內。

這是元件。道具從父級正確傳遞,因為 console.log(img) 傳回正確的路徑。

import data from '../asset/data/blog-post.json'

function BlogPostFeed() {
    const post = data.map(item => {
        return <BlogPost
            key={item.id}
            img={item.img}
        />
    })
    return (
        <>
            {post}
        </>
    )
}

function BlogPost(props) {
    const { img } = props;
    return (
        <>
            <img src={require(img)} alt="photo" />
        </>
    )
}

這就是 json 檔的樣子。

[ 
 {
        "id": 1,
        "img": "../photo/photo.jpeg"  
 }
]

我確信所有資料夾路徑都是正確的。

我嘗試貼上路徑 sth 並且正在工作。但是, ${img})} alt="sth"/ > 可以。

我還嘗試將 json 檔案更改為 "img": require("../photo/photo.jpeg") 但隨後出現 json 檔案錯誤。

彈出錯誤找不到模組'../photo/photo.jpeg'

P粉617237727
P粉617237727

全部回覆(1)
P粉155710425

此錯誤與 React 底層的 webpack 如何與 require() 函數配合使用有關。 require() 不是標準的 JavaScript 函數,而是 Node.js 和 webpack 提供的功能。 require() 在建置過程中執行模組的同步讀取,這意味著 webpack 需要在建置時(應用程式執行之前)而不是執行時間了解模組之間的依賴關係。

因此,當您直接使用require("../photo/photo.jpeg") 時,webpack 知道將此檔案包含在建置套件中,因為路徑是靜態的,而不是動態的。但是,當您嘗試使用 require(img) 時,webpack 在程式碼運行之前並不知道您所引用的文件,但為時已晚。

在這種情況下,我建議兩個可能的解決方案:

  1. 使用動態導入:

#這是現代 JavaScript 提供的功能,webpack 也支援它。以下是您在元件中使用它的方法:

import React, { useState, useEffect } from 'react';

function BlogPost(props) {
    const { img } = props;
    const [imgSrc, setImgSrc] = useState();

    useEffect(() => {
        import(`../${img}`)
        .then((image) => setImgSrc(image.default))
        .catch((err) => console.error(err));
    }, [img]);

    return (
        <>
            {imgSrc && photo}
        
    );
}

請注意,您需要在 JSON 檔案中提供專案根目錄的相對路徑才能正常運作。

  1. 使用公共資料夾提供圖像: 如果您使用 create-react-app,則可以將映像放入公用資料夾中。然後,您可以透過相對於公用資料夾的路徑來引用這些圖像:
function BlogPost(props) {
    const { img } = props;
    return (
        <>
            photo
        
    );
}

請注意,在 JSON 檔案中,您只需提供公共目錄的路徑。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!