ReactJS và hình ảnh trong thư mục chung


95

Tôi là người mới trong ReactJS và tôi muốn nhập hình ảnh trong một thành phần. Những hình ảnh này nằm bên trong thư mục chung và tôi không biết cách truy cập thư mục từ thành phần phản ứng.

Có ý kiến ​​gì không?

BIÊN TẬP

Tôi muốn nhập một hình ảnh bên trong Bottom.js hoặc Header.js

Thư mục cấu trúc là:

nhập mô tả hình ảnh ở đây

Tôi không sử dụng webpack. Tôi có nên không?

Chỉnh sửa 2

Tôi muốn sử dụng webpack để tải hình ảnh và phần còn lại của nội dung. Vì vậy, trong thư mục cấu hình của tôi, tôi có các tệp tiếp theo:

nhập mô tả hình ảnh ở đây

Tôi cần thêm đường dẫn của hình ảnh ở đâu và làm thế nào?

Cảm ơn


1
thư mục này là công khai cho cái gì? cấu trúc dự án của bạn là gì? Bạn cũng đang đóng gói hình ảnh với webpack hay điều này bị loại trừ? vv vv vv bối cảnh bối cảnh
Joel Harkes

@JoelHarkes đã chỉnh sửa.
Aceconhielo

có vẻ như nó không được đóng gói. bạn đã thử src="/images/logofooter.png"chưa:?
Joel Harkes

Xin lỗi, điều này không liên quan đến câu hỏi nhưng bạn sử dụng chủ đề biểu tượng nào?
Nermin

Câu trả lời:


79

Để tham khảo hình ảnh trước công chúng, có hai cách tôi biết cách làm. Một giống như trên từ Homam Bahrani.

sử dụng

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

Và vì điều này hoạt động nên bạn thực sự không cần bất kỳ thứ gì khác nhưng, điều này cũng hoạt động ...

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

1
Nó không hiển thị bất kỳ lỗi nào trong bảng điều khiển nhưng hình ảnh xuất hiện dưới dạng biểu tượng hình ảnh mặc định không phải những gì tôi đã nhập. Tôi đã thử cả hai trường hợp bạn đã nêu. Hãy giúp tôi ra. Cảm ơn !
Prakhar Mittal

148

Bạn không cần bất kỳ cấu hình webpack nào cho việc này ..

Trong thành phần của bạn chỉ đưa ra đường dẫn hình ảnh. Theo mặc định, phản ứng sẽ biết nó trong thư mục chung.

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

2
Điều này đã làm việc cho tôi. Chỉ tôi sao chép hình ảnh vào thư mục công khai. React tự động giải quyết đường dẫn.
Vineeth Bhaskaran

2
Và nếu hình ảnh nằm trong một số thư mục bên trong thư mục chung, sẽ phản ứng biết để tìm thấy nó?
Yuval Levy

2
Có @YuvalLevy.
Oliver Voutat

10

Các tài liệu phản ứng giải thích điều này một cách độc đáo trong tài liệu, bạn phải sử dụng process.env.PUBLIC_URLvới các hình ảnh được đặt trong thư mục chung. Xem tại đây để biết thêm thông tin

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

Có, đối với hình ảnh động bên ngoài cấu trúc phân cấp dir src. Bạn có thể truy cập những cái tĩnh, như logo hoặc nền bằng phương pháp nhập.
Juan Lanus

1
ngoài ra, điều này dành cho các ứng dụng được xây dựng bằng ứng dụng tạo phản ứng
eballeste

1
Nó không hiển thị bất kỳ lỗi nào trong bảng điều khiển nhưng hình ảnh xuất hiện dưới dạng biểu tượng hình ảnh mặc định không phải những gì tôi đã nhập. Hãy giúp tôi ra.
Prakhar Mittal

4

1- Thật tốt nếu bạn sử dụng webpack cho các cấu hình nhưng bạn có thể chỉ cần sử dụng đường dẫn hình ảnh và phản ứng sẽ phát hiện ra rằng nó nằm trong thư mục chung.

<img src="/image.jpg">

2- Nếu bạn muốn sử dụng webpack, đây là cách thực hành tiêu chuẩn trong React. Bạn có thể sử dụng các quy tắc này trong tệp webpack.config.dev.js của mình.

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

thì bạn có thể nhập tệp hình ảnh trong các thành phần phản ứng và sử dụng nó.

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

<img src={image}/>

2

Chúng tôi biết React là SPA. Mọi thứ được hiển thị từ thành phần gốc bằng cách mở rộng sang HTML thích hợp từ JSX.

Vì vậy, không quan trọng bạn muốn sử dụng hình ảnh ở đâu. Cách tốt nhất là sử dụng một đường dẫn tuyệt đối (có tham chiếu đến công khai). Đừng lo lắng về những con đường tương đối.

Trong trường hợp của bạn, điều này sẽ hoạt động ở mọi nơi:

"./images/logofooter.png"


1

Bạn nên sử dụng webpack ở đây để cuộc sống của bạn dễ dàng hơn. Thêm quy tắc dưới đây vào cấu hình của bạn:

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]'
        }
      }

Sau đó, bạn có thể chỉ cần nhập các hình ảnh vào các thành phần phản ứng của mình:

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

Sử dụng myImage như dưới đây:

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

hoặc nếu hình ảnh được nhập vào trạng thái cục bộ của thành phần

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

Tôi nghi ngờ liệu bạn có cần webpack để có thể nhập tài nguyên hay không.
Siya

@fshock, tôi đã nói nó sẽ giúp bạn hoàn thành nhiệm vụ dễ dàng hơn.
Umesh

@Umesh Tôi thích làm điều đó với Webpack hơn. Vậy bạn nói rằng tôi phải thêm quy tắc trong cấu hình nhưng tệp nào? Tôi có path.js, polyfills.js, webpack.config.dev.js, webpack.config.prod.js và webpackDevServer.config.js. Tôi sẽ chỉnh sửa câu hỏi để tất cả các bạn có thể nhìn thấy cấu trúc. Cảm ơn
Aceconhielo

@Aceconhielo, bạn nên đưa nó vào webpack.config.dev.js và webpack.config.prod.js
Umesh

0

Bạn cũng có thể sử dụng điều này .. nó hoạt động giả sử 'yourimage.jpg' nằm trong thư mục chung của bạn.

<img src={'./yourimage.jpg'}/>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.