反应和 SVG 精灵
React and SVG sprite
我正在使用 React,我正在尝试从 sprite 加载 svg 图标。我的精灵是这样的:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<symbol viewBox="0 0 28.3 28.3" id="square">
<path d="M.3 30.7h27L13.8 3.8zM126.3-51.7c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16z" />
<path d="M0 28.3h28.3L14.2 0 0 28.3zm5.3-3.2l8.9-17.7L23 25.1H5.3z" />
</symbol>
<symbol viewBox="0 0 28.3 28.3" id="circle">
<circle cx="14.2" cy="14.2" r="14.2" />
</symbol>
</defs>
</svg>
我加载它:
<svg viewBox="0 0 28.3 28.3" className="App-icon">
<use xlinkHref="./sprite#square" />
</svg>
没有结果。我做了一个沙箱作为例子:https://codesandbox.io/s/l711v6j7v7
如果您想将其作为外部资源引用,您需要对 svg 文件使用正确的 URL 并且它需要 public 可以访问。所以在codesandbox中你需要将它移动到public文件夹中,这样你就可以在浏览器中通过
访问它
https://codesandbox.io/s/l711v6j7v7/sprite.svg
然后你可以这样引用它:
<use href="/sprite.svg#square" />
对于那些 SVG 文件是 existing/external svg 文件的人。
你可能有一个现有的 SVG webpack 加载器,它不支持 SVG 精灵的概念。为什么?它通常需要一个文件 reference/url 到 sprite 文件或 SVG(节点)必须存在于 DOM (下面的解决方案)
这个有效:
- 将纯 SVG 转换为 JSX(google html 为 jsx)
- 创建一个新的纯 React 组件并在 render() 方法中简单地 return 转换后的 JSX
- 导入并包含创建的 React Sprite 组件
- 现在通过
<use><svg href="#symbolnameorid"></svg></use>
使用sprite符号现在可以不用文件前缀使用它了
我正在使用 React,我正在尝试从 sprite 加载 svg 图标。我的精灵是这样的:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<symbol viewBox="0 0 28.3 28.3" id="square">
<path d="M.3 30.7h27L13.8 3.8zM126.3-51.7c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16z" />
<path d="M0 28.3h28.3L14.2 0 0 28.3zm5.3-3.2l8.9-17.7L23 25.1H5.3z" />
</symbol>
<symbol viewBox="0 0 28.3 28.3" id="circle">
<circle cx="14.2" cy="14.2" r="14.2" />
</symbol>
</defs>
</svg>
我加载它:
<svg viewBox="0 0 28.3 28.3" className="App-icon">
<use xlinkHref="./sprite#square" />
</svg>
没有结果。我做了一个沙箱作为例子:https://codesandbox.io/s/l711v6j7v7
如果您想将其作为外部资源引用,您需要对 svg 文件使用正确的 URL 并且它需要 public 可以访问。所以在codesandbox中你需要将它移动到public文件夹中,这样你就可以在浏览器中通过
访问它https://codesandbox.io/s/l711v6j7v7/sprite.svg
然后你可以这样引用它:
<use href="/sprite.svg#square" />
对于那些 SVG 文件是 existing/external svg 文件的人。 你可能有一个现有的 SVG webpack 加载器,它不支持 SVG 精灵的概念。为什么?它通常需要一个文件 reference/url 到 sprite 文件或 SVG(节点)必须存在于 DOM (下面的解决方案)
这个有效:
- 将纯 SVG 转换为 JSX(google html 为 jsx)
- 创建一个新的纯 React 组件并在 render() 方法中简单地 return 转换后的 JSX
- 导入并包含创建的 React Sprite 组件
- 现在通过
<use><svg href="#symbolnameorid"></svg></use>
使用sprite符号现在可以不用文件前缀使用它了