我需要什么:我正在尝试从外部文件夹显示svg,并且该文件夹包含大约50个文件和
public folder
|-images
-| 50 svgs
在app.js中
我正在尝试显示图像
import React from 'react';
import './App.css';
import svgs from "../public/svgfolder/0.svg"
class App extends React.Component{
render(){
return(
<div>
<img src={svgs} alt="test"></img>
</div>
)
}
}
export default App;
我遇到错误
未找到模块:您尝试导入../public/svgfolder/0.svg 不在项目src /目录中。相对进口 不支持src /以外的版本。
在这里我需要三件事
注意:如果我通过网址<img src={"https://s.cdpn.io/3/kiwi.svg"}/>
调用svg,
它正在工作,如果使用本地文件,则不能运行
如果您将svg单个文件 src 文件夹放入,则单个文件可以显示
答案 0 :(得分:1)
React无法访问React代码中要使用的src目录之外的内容。
可能的解决方案可能是:
将svg移动到src目录中(推荐)。
使用“公用”文件夹并像这样访问它。 (Using Public Folder)
。
// Using Public Folder
import React from 'react';
import './App.css';
class App extends React.Component{
render(){
const svgs = ["0.svg", "23.svg",...];
return(
<div>
{svgs.map(svg =>
<img src={`${process.env.PUBLIC_URL}/svgfolder/${svg}`} alt="test"></img>
}
</div>
)
}
}
export default App;
答案 1 :(得分:1)
我也有尝试这种方法的相同场景,并且可以尝试
import React from 'react';
import './App.css';
var images = [];
class App extends React.Component {
importAll(r) {
return r.keys().map(r);
}
componentWillMount() {
images = this.importAll(require.context('../public/public/svgfolder/', false, /\.(png|jpe?g|svg)$/));
}
render(){
return(
<div>
<div>
{images.map((image, index) => <div> <p>{index + 1}</p> <img key={index} src={image} alt="info"></img> </div> )}
</div>
</div>
)
}
}
export default App;
答案 2 :(得分:0)
我建议您将内联SVG作为React组件,而不是像现在那样加载SVG。这样,您就可以使用道具和状态以及许多其他有用功能来控制样式。
示例:
import React from 'react';
import ReactDOM from 'react-dom'
const GithubSVG = (props) => {
const { backFill, className, mainFill } = props.props;
return(
<svg
className={className}
height='512'
id='Layer_1'
version='1.1'
viewBox='0 0 512 512'
width='512'
>
<defs id='defs'/>
<g id='g'>
<rect
height='512'
id='rect'
style={{
fill: backFill,
fillOpacity: 1,
fillRule: 'nonzero',
stroke: 'none'
}}
width='512'
x='0'
y='0'
/>
<path
d='a bunch of random numbers'
id='svg'
style={{fill: mainFill}}
/>
</g>
</svg>
)
}
export default GithubSVG;
您现在可以在任何地方导入该组件。
答案 3 :(得分:0)
如果您使用的是Webpack,最好使用svg-url-loader
进行Webpack并将其打包到您的部署中。
在webpack.config中添加以下内容
module: {
rules: [
{
test: /\.svg/,
use: { loader: 'svg-url-loader', options: {} },
}
]
}
app.css
.zero {
background: url('../public/svgfolder/0.svg') no-repeat;
}
app.js
<i className="zero" />