如何在Rails / Webpacker / React应用程序中处理图像?

qjp7pelc  于 2023-04-30  发布在  Webpack
关注(0)|答案(5)|浏览(130)

我使用Webpacker和Rails 5。1.4使用React、Redux和react-router-dom。
我在app/javascript/src/components/中有一个Navbar.jsx组件需要显示图像,但我无法访问存储在app/assets/images/中的图像。
以下是我尝试过的:

<img src="logo.png" alt="Logo" />
<img src="assets/logo.png" alt="Logo" />
<img src="assets/images/logo.png" alt="Logo" />

从根路径上最后一次尝试工作,因为/assets/images/logo.png确实存在,但是当我导航到/posts/:id时,它给了我以下错误:

logo.png:1 GET http://localhost:3000/posts/assets/images/logo.png 404 (Not Found)

你能帮我吗?更多关于你在那种或混合React/Rails应用程序中处理图像的方式?
谢谢

qvtsj1bj

qvtsj1bj1#

只需编辑文件config/webpacker.yml并替换以下行:

resolved_paths: []

用这个:

resolved_paths: ['app/assets']

然后,将图像放入app/assets/images文件夹并像这样加载:

import React from 'react'
import MyImage from 'images/my_image.svg'

const MyComponent = props => <img src={MyImage} />

export default MyComponent
lg40wkob

lg40wkob2#

If we leave resolved_path as [] in webpacker.yml also it works.

Example = 

# Additional paths webpack should lookup modules
  # ['app/assets', 'engine/foo/app/assets']
  resolved_paths: []

  static_assets_extensions:
    - .jpg
    - .jpeg
    - .png
    - .gif
    - .tiff
    - .ico
    - .svg
    - .eot
    - .otf
    - .ttf
    - .woff
    - .woff2

您甚至可以在组件中创建图像文件夹。将其加载到组件文件中,如下所示-

import React from 'react';
import MyImage from '${imagePath}/example1.png'

export class MyComponent extends React.Component {
  render() {
    return (
     <React.Fragment>
       <img src={MyImage} alt="Image text"/>
     </React.Fragment>     
    )
  }
}

WebPacker在内部将这些映像路径转换为包。

dly7yett

dly7yett3#

更新2021(rails 6.1.4),resolved_paths键已更改为additional_paths

所以,改变:

# config/webpacker.yml

default: &default
  resolved_paths: []

进入:

# config/webpacker.yml

default: &default
  additional_paths: ['app/assets']

剩下的是丹尼尔的答案

pxq42qpu

pxq42qpu5#

对于那些可能仍然有这个问题的人,给予这个:
把你的img放在app/assets/images中。在这个例子中,我的形象被称为“标志。png '.
在你的申请中。html.erb文件,把这个放在头部:

<script type="text/javascript">
   window.logo = "<%= image_url('logo.png') %>"
</script>

现在,在组件中,渲染图像:

return (
  <div>
    <a href="/">
      <img src={window.logo}/>
    </a>
  </div>
);

希望这能帮上忙。

相关问题