【问题标题】:styling SVG paths in React在 React 中设置 SVG 路径
【发布时间】:2020-10-14 15:52:45
【问题描述】:

我是 React 的新手,我正在尝试将 svg 图像添加到我的组件并为其每个路径添加动态样式。但是,我在这样做时遇到了问题。我正在使用 create-react-app

我将我的 svg 作为 React 组件导入

import { ReactComponent as SVGimg} from './img/svg-img.svg';

并在我的渲染中使用它。我希望通过使用我在纯 HTML/CSS/JS 上工作的 for...of 循环为所有路径添加样式

render() {
  const svgImg = document.querySelectorAll('svg path')
  for (let path of svgImg) {
    path.classList.add('some-class');
  }

  return(
    <div>
      <SVGimg/>
    </div>
  );
}

我还想提一下,SVG 有很多路径

【问题讨论】:

  • 您的意思是要添加随机样式,以便在每次呈现页面后更改?或者只是在加载后添加样式?无论哪种方式,我认为类名和 css 都是要走的路。我想知道您是否想要一个迭代器,例如 pathClass1、pathClass2 等?
  • 我想在每个路径加载后添加一个延迟。我已经有了 css 类,但我不知道如何从 svg 中获取路径。下面的答案有效:D

标签: javascript reactjs svg


【解决方案1】:

您可以在 svg 中添加一个类,例如:&lt;svg&gt;&lt;path class='pathClass'&gt;&lt;/svg&gt;

然后在你的 React 组件中你可以通过调用来获取路径:const path = document.getElementsByClassName('pathClass');

然后像这样添加类:path.classList.add('some-class');

更新

由于您使用的是类组件,因此您可以在 componentDidMont() 原生 React 方法中调用 classList.add() 方法,如下所示:

class YourComponent extends Component {
  constructor(props) {
    super(props);

    this.svgRef = React.createRef();
  }

  componentDidMount() {
    this.svgRef.current.classList.add('some-class');
  }

  render() {
    return(
      <div>
        <SVGimg ref={this.svgRef} />
      </div>
    );
  }
}

这将在渲染方法完成后立即触发。

【讨论】:

  • 这仍然不起作用..当我在 for...循环中使用 console.log 时,没有返回任何内容,但是,即使是 path.length.. 当我在控制台上运行 path.length 时,它返回 0 .. 但是当我在控制台中运行整个代码块(const 和 for 循环)时,svg 会被样式化。我想知道它是否是因为 的放置?
  • 问题是 svg 元素尚未添加到 DOM 中,但您需要使用 refs 才能访问 DOM 元素
  • 我还没有了解 react refs 但这就像魔术一样!非常感谢!!
猜你喜欢
  • 2020-01-29
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 2011-08-20
  • 2017-04-25
相关资源
最近更新 更多