É possível incorporar a marcação SVG em um componente ReactJS?
render: function() {
return (
<span>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmln ...
</span>
);
}
Resultados no erro:
Os atributos do espaço para nome não são suportados. ReactJSX não é XML.
Qual é a maneira mais leve de fazer isso? Usar algo como React ART é um exagero para o que estou tentando fazer.
javascript
svg
reactjs
nicholas
fonte
fonte
<svg id="Layer_1">
(ou melhor ainda, sem o ID). Edit: aqui está um exemplo: jsbin.com/nifemuwi/2/edit?js,outputRespostas:
Atualização 2016-05-27
A partir do React v15, o suporte ao SVG no React é (próximo a?) 100% de paridade com o suporte atual do navegador ao SVG ( origem ). Você só precisa aplicar algumas transformações de sintaxe para torná-lo compatível com JSX, como você já precisa fazer para HTML (
class
→className
,style="color: purple"
→style={{color: 'purple'}}
). Para qualquer atributo com espaço para nome (separado por dois pontos), por exemploxlink:href
, remova:
e coloque em maiúscula a segunda parte do atributo, por exemploxlinkHref
. Aqui está um exemplo de uma SVG com<defs>
,<use>
e estilos inline:Demonstração de código de trabalho
Para obter mais detalhes sobre suporte específico, consulte a lista de documentos de atributos SVG suportados . E aqui está o problema (agora fechado) do GitHub que rastreia o suporte a atributos SVG com espaço para nome.
Resposta anterior
Você pode fazer uma incorporação simples do SVG sem precisar usar
dangerouslySetInnerHTML
apenas os atributos de espaço para nome. Por exemplo, isso funciona:Nesse ponto, você pode pensar em adicionar adereços como
fill
, ou qualquer outra coisa que possa ser útil para configurar.fonte
.class1, .class2{fill: #005baa;}
' Como posso corrigir isso?classB
e funcionou: codepen.io/acusti/pen/BVJzNgSe você apenas possui uma sequência svg estática que deseja incluir, pode usar
dangerouslySetInnerHTML
:e o React incluirá a marcação diretamente sem processá-la.
fonte
De acordo com um desenvolvedor de reagentes , você não precisa do espaço para nome xmlns. Se você precisar do atributo
xlink:href
poderá usar xlinkHref a partir de react 0.14Exemplo
fonte
Se você deseja carregá-lo a partir de um arquivo, tente usar o React-inlinesvg - isso é bastante simples e direto.
fonte