@danil_linkins

Как организовать передача состояния из react в svg?

Допустим у нас есть один svg файл. Я делаю inject файла в компонент через плагин и получаю на выходе ..., которым могу управлять.

Суть в том, что у иконки есть 4 возможных состояния, с анимацией между переходами в эти состояния.
Как лучше всего организовать данное управление?
Если я еще могу прописать анимацию прямо в svg, то с состоянием все труднее.

Есть ли какие то уже проверенные методы и способы?
Поскольку костылить на css несколько появляющихся и исчезающих файлом не практично, как я думаю. Даже для переиспользования будут трудности.
  • Вопрос задан
  • 695 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Лучше создавать спрайт и добавлять его в документ, а иконки забирать по id.
Компонент на примере Styled Components:
import React from 'react';
import styled from 'styled-components';

const SVG = styled.svg`
  display: inline-block;
  vertical-align: middle;
`;

const Icon = ({ name, ...props }) {
  if (!name) {
    throw new Error('Unknown icon name!');
  }
  return (
    <SVG {...props}>
      <use xlinkHref={`#icon-${name}`} />
    </SVG>
  );
}

export default Icon;


Cтилизованая иконка c разными состояниями:
import React from 'react';
import styled from 'styled-components';
import { Icon } from './components';

const StyledIcon = styled(Icon)`
  fill: ${props => props.state.fill};
`;

const Example = ({ iconState }) => <StyledSVG name="profile" state={iconState} />;

export default Example;


Styled Components, тут лишь для примера. Подобные компоненты легко реализуются и без использования этой библиотеки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы