Normalmente, para incluir a maioria dos meus ícones SVG que exigem um estilo simples, eu faço:
<svg>
<use xlink:href="/svg/svg-sprite#my-icon" />
</svg>
Agora estou brincando com ReactJS ultimamente, avaliando-o como um possível componente em minha nova pilha de desenvolvimento de front-end, no entanto, percebi que em sua lista de tags / atributos suportados, nem use
ou xlink:href
são suportados.
É possível usar sprites svg e carregá-los desta forma no ReactJS?
<use xlinkHref="/svg/svg-sprite#my-icon" />
.xlink:href
está obsoleto, agora deve ser usado apenashref
- developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:hrefxlink:href
então ainda precisamos usá-lo. Os aplicativos da web reais precisam usar o denominador comum dos recursos do navegador ou implementar soluções alternativas / polyfills específicos.Property 'xlink' does not exist on type 'SVGProps<SVGImageElement>
Respostas:
Atualização de setembro de 2018 : esta solução está obsoleta, leia a resposta de Jon .
-
O React não suporta todas as tags SVG, como você diz, há uma lista de tags suportadas aqui . Eles estão trabalhando em um suporte mais amplo, por exemplo, neste tíquete .
Uma solução alternativa comum é injetar HTML em vez de tags não suportadas, f.ex:
fonte
dangerouslySetInnerHTML
. Você pode usarxlinkHref
conforme mencionado abaixo.MDN diz que
xlink:href
está obsoleto em favor dehref
. Você deve ser capaz de usar ohref
atributo diretamente. O exemplo abaixo inclui ambas as versões.A partir do React 0.14 ,
xlink:href
está disponível via React como propriedadexlinkHref
. É mencionado como um dos "aprimoramentos notáveis" nas notas de versão do 0.14.Atualização 09/06/2018: informações adicionadas sobre atributos
href
vsxlink:href
e exemplo atualizado para incluir ambos. Obrigado @devuxerAtualização 3 : no momento em que este artigo foi escrito, as propriedades SVG master do React podem ser encontradas aqui .
Atualização 2 : Parece que todos os atributos svg devem agora estar disponíveis via react (consulte o atributo svg PR ).
Atualização 1 : você pode querer ficar de olho no problema relacionado ao svg no GitHub para obter suporte adicional a SVG. Há desenvolvimentos em andamento.Demo:
fonte
xlink:href
foi preterido e a recomendação é usarhref
sem o prefixo de namespace. (Observe, no entanto, que se você estiver usando TypeScript, as tipificações ainda não foram atualizadas para refletir isso.)Se você encontrar
xlink:href
, em seguida, você pode obter o equivalente em ReactJS através da remoção do cólon e camelcasing o texto acrescentou:xlinkHref
.Você provavelmente usará outras tags de namespace em SVG, como
xml:space
, etc. A mesma regra se aplica a eles (ou seja,xml:space
torna-sexmlSpace
).fonte
Como já foi dito na resposta de Jon Surrell, use-tags agora. Se não estiver usando JSX, você pode implementá-lo assim:
fonte
Criei um pequeno ajudante que contorna esse problema: https://www.npmjs.com/package/react-svg-use
primeiro
npm i react-svg-use -S
então simplesmentee isso irá gerar a seguinte marcação
fonte
Os SVGs podem ser importados e usados diretamente como um componente React em seu código React.
fonte