我无法从src/assets/image
我的CRA应用程序中加载图像。我想避免将这些图像放在我的公用文件夹中,但是由于某些原因,这似乎是显示它们的唯一方法。
我有一个homepageinfo.ts
带有路径的json文件
export const homepageinfo: homepageinfoType = {
...
hero_portrait: "testimg.jpg",
};
一个dataClient
利用函数getHomePageInfo导入json文件的util函数文件。
export const getHomePageInfo = () => {
return homepageinfo;
};
和另一个文件 HomeTitle.tsx
import React from "react";
import { Grid, Header, Image, Segment } from "semantic-ui-react";
import { getHomePageInfo } from "utils/dataClient";
export const HomeTitle = () => {
let homepageinfo = getHomePageInfo();
return (
<Grid columns={2}>
...
<Grid.Column
only="tablet computer"
verticalAlign="bottom"
textAlign="right"
>
{console.log(require("assets/image/" + homepageinfo.hero_portrait))}
<Image as="img"
className="img_portrait"
spaced={"left"}
src={require("assets/image/" + homepageinfo.hero_portrait)}
/>
</Grid.Column>
</Grid>
);
};
console.log能够返回asset / image / homepageinfo.hero_portrait的值,但是在实际的Image组件中它仍然显示为空白。
如果我将图像移动到公用文件夹,则可以显示该图像,但我不想将这些图像放在公用文件夹中。
你需要default
从返回的结果require()
。
这通常会为你处理时import
的语句用来代替require()
import React from "react";
import { Grid, Header, Image, Segment } from "semantic-ui-react";
import { getHomePageInfo } from "utils/dataClient";
export const HomeTitle = () => {
let homepageinfo = getHomePageInfo();
let imageUrl;
try {
const res = require("assets/image/" + homepageinfo.hero_portrait);
console.log(res);
imageUrl = res.default;
} catch () {
imageUrl = ''; // file not found
}
return (
<Grid columns={2}>
...
<Grid.Column
only="tablet computer"
verticalAlign="bottom"
textAlign="right"
>
<Image as="img"
className="img_portrait"
spaced={"left"}
src={imageUrl}
/>
</Grid.Column>
</Grid>
);
};
如果找不到文件,UPDATED require()可能会失败。
因此,我建议使用像这样的import
文档建议:
homepageinfo.ts
:
import testImg from './assets/image/testimg.jpg';
export const homepageinfo: homepageinfoType = {
...
hero_portrait: testImg,
};
这样,所有图像将在构建期间解析为路径,homepageinfo.hero_portrait
并将包含结果URL
谢谢您添加默认的作品。在这种特殊情况下,这可能没有多大意义,但是我想弄清楚如何从这样的json文件路径中加载它,因为我还有其他组件必须从一系列路径中加载,并且遇到了同样的问题和那些。在那种情况下,我认为导入每个路径都不是很友好。