ReactJS และรูปภาพในโฟลเดอร์สาธารณะ


95

ฉันใหม่ใน ReactJS และฉันต้องการนำเข้าภาพในส่วนประกอบ รูปภาพเหล่านี้อยู่ในโฟลเดอร์สาธารณะและฉันไม่รู้วิธีเข้าถึงโฟลเดอร์จากคอมโพเนนต์การตอบสนอง

ความคิดใด ๆ ?

แก้ไข

ฉันต้องการนำเข้ารูปภาพภายใน Bottom.js หรือ Header.js

โฟลเดอร์โครงสร้างคือ:

ป้อนคำอธิบายภาพที่นี่

ฉันไม่ได้ใช้ webpack ฉันควร ?

แก้ไข 2

ฉันต้องการใช้ webpack เพื่อโหลดรูปภาพและเนื้อหาที่เหลือ ดังนั้นในโฟลเดอร์ config ของฉันฉันมีไฟล์ถัดไป:

ป้อนคำอธิบายภาพที่นี่

ฉันต้องเพิ่มเส้นทางของรูปภาพที่ไหนและทำอย่างไร

ขอบคุณ


1
โฟลเดอร์นี้เป็นสาธารณะเพื่ออะไร โครงสร้างโครงการของคุณคืออะไร? คุณรวมรูปภาพไว้กับ webpack ด้วยหรือไม่รวมอยู่ด้วย? บริบทอื่น ๆ ฯลฯ
Joel Harkes

@JoelHarkes แก้ไข
Aceconhielo

ดูเหมือนว่าจะไม่ได้บรรจุ คุณได้ลอง: src="/images/logofooter.png"?
Joel Harkes

ขออภัยสิ่งนี้ไม่เกี่ยวข้องกับคำถาม แต่คุณใช้ชุดรูปแบบไอคอนใด
Nermin

คำตอบ:


78

ในการอ้างอิงภาพในที่สาธารณะมีสองวิธีที่ฉันรู้ว่าจะทำอย่างไรให้ตรงไปตรงมา หนึ่งเหมือนข้างต้นจากโฮมัมบาห์รานี

โดยใช้

    <img src={process.env.PUBLIC_URL + '/yourPathHere.jpg'} /> 

และเนื่องจากการทำงานนี้คุณไม่ต้องการสิ่งอื่นใดเลย แต่มันก็ใช้ได้เช่นกัน ...

    <img src={window.location.origin + '/yourPathHere.jpg'} />

1
ไม่แสดงข้อผิดพลาดใด ๆ ในคอนโซล แต่รูปภาพปรากฏเป็นไอคอนรูปภาพเริ่มต้นไม่ใช่สิ่งที่ฉันนำเข้า ฉันได้ลองทั้งสองกรณีที่คุณกล่าวถึงแล้ว กรุณาช่วยฉันออกไป. ขอบคุณ!
Prakhar Mittal

148

คุณไม่จำเป็นต้องกำหนดค่า webpack สำหรับสิ่งนี้ ..

ในส่วนประกอบของคุณเพียงแค่ระบุเส้นทางรูปภาพ โดยค่าเริ่มต้นการตอบสนองจะทราบในไดเรกทอรีสาธารณะ

<img src="/image.jpg" alt="image" />

2
สิ่งนี้ได้ผลสำหรับฉัน มีเพียงฉันเท่านั้นที่คัดลอกรูปภาพไปยังไดเร็กทอรีสาธารณะตอบกลับแก้ไขเส้นทางโดยอัตโนมัติ
Vineeth Bhaskaran

2
และหากรูปภาพอยู่ในโฟลเดอร์บางโฟลเดอร์ภายในโฟลเดอร์สาธารณะจะตอบสนองหรือไม่เพื่อค้นหา
Yuval Levy

2
ใช่ @YuvalLevy
Oliver Voutat

10

เอกสารตอบกลับอธิบายสิ่งนี้อย่างดีในเอกสารคุณต้องใช้process.env.PUBLIC_URLกับภาพที่อยู่ในโฟลเดอร์สาธารณะ ดูข้อมูลเพิ่มเติมได้ที่นี่

return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />;

ใช่สำหรับรูปภาพแบบไดนามิกที่อยู่นอกลำดับชั้นของ src dir คุณสามารถเข้าถึงสิ่งที่คงที่เช่นโลโก้หรือพื้นหลังได้ด้วยวิธีการนำเข้า
Juan Lanus

1
สำหรับแอพที่สร้างด้วยแอพ create react
eballeste

1
ไม่แสดงข้อผิดพลาดใด ๆ ในคอนโซล แต่รูปภาพปรากฏเป็นไอคอนรูปภาพเริ่มต้นไม่ใช่สิ่งที่ฉันนำเข้า กรุณาช่วยฉันออกไป.
Prakhar Mittal

4

1- เป็นการดีถ้าคุณใช้ webpack สำหรับการกำหนดค่า แต่คุณสามารถใช้เส้นทางรูปภาพและตอบสนองจะพบว่าอยู่ในไดเรกทอรีสาธารณะ

<img src="/image.jpg">

2- หากคุณต้องการใช้ webpack ซึ่งเป็นแนวทางปฏิบัติมาตรฐานใน React คุณสามารถใช้กฎเหล่านี้ในไฟล์ webpack.config.dev.js ของคุณ

module: {
  rules: [
    {
      test: /\.(jpe?g|gif|png|svg)$/i,
      use: [
        {
          loader: 'url-loader',
          options: {
            limit: 10000
          }
        }
      ]
    }
  ],
},

จากนั้นคุณสามารถนำเข้าไฟล์รูปภาพในส่วนประกอบปฏิกิริยาและใช้งานได้

import image from '../../public/images/logofooter.png'

<img src={image}/>

2

เรารู้ว่า React คือ SPA ทุกอย่างแสดงผลจากองค์ประกอบรากโดยขยายเป็น HTML ที่เหมาะสมจาก JSX

ดังนั้นจึงไม่สำคัญว่าคุณต้องการใช้ภาพที่ใด แนวทางปฏิบัติที่ดีที่สุดคือใช้เส้นทางสัมบูรณ์ (อ้างอิงถึงสาธารณะ) ไม่ต้องกังวลเกี่ยวกับเส้นทางสัมพัทธ์

ในกรณีของคุณสิ่งนี้ควรใช้ได้ทุกที่:

"./images/logofooter.png"


1

คุณควรใช้ webpack ที่นี่เพื่อทำให้ชีวิตของคุณง่ายขึ้น เพิ่มกฎด้านล่างในการกำหนดค่าของคุณ:

const srcPath = path.join(__dirname, '..', 'publicfolder')

const rules = []

const includePaths = [
  srcPath
]
    // handle images
    rules.push({
      test: /\.(png|gif|jpe?g|svg|ico)$/,
      include: includePaths,
      use: [{
        loader: 'file-loader',
        options: {
          name: 'images/[name]-[hash].[ext]'
        }
      }

หลังจากนี้คุณสามารถนำเข้าภาพไปยังส่วนประกอบการตอบสนองของคุณ:

import myImage from 'publicfolder/images/Image1.png'

ใช้ myImage ดังนี้:

<div><img src={myImage}/></div>

หรือหากรูปภาพถูกนำเข้าสู่สถานะของส่วนประกอบในเครื่อง

<div><img src={this.state.myImage}/></div> 

ฉันสงสัยว่าคุณต้องการ webpack เพื่อให้สามารถนำเข้าทรัพยากรได้หรือไม่
Siya

@fshock ฉันบอกว่ามันจะทำให้งานสำเร็จได้ง่ายขึ้น
Umesh

@Umesh ฉันชอบทำกับ Webpack มากกว่า คุณบอกว่าฉันต้องเพิ่มกฎใน config แต่ไฟล์ไหน? ฉันมี path.js, polyfills.js, webpack.config.dev.js, webpack.config.prod.js และ webpackDevServer.config.js ฉันจะแก้ไขคำถามเพื่อให้คุณทุกคนเห็นโครงสร้าง ขอบคุณ
Aceconhielo

@Aceconhielo คุณควรรวมไว้ใน webpack.config.dev.js และ webpack.config.prod.js
Umesh

0

คุณยังสามารถใช้สิ่งนี้ .. ได้โดยสมมติว่า 'yourimage.jpg' อยู่ในโฟลเดอร์สาธารณะของคุณ

<img src={'./yourimage.jpg'}/>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.