【发布时间】:2019-03-04 15:36:38
【问题描述】:
我正在尝试使用 React 编写一个 SVG 操作应用程序,并且我正在使用 JQuery 来读取和过滤 svg 文件,但我不知道为什么当我使用 .map() 时不起作用,但是当我使用paths[0] 之类的方法绘制访问路径数组中元素的路径。
import React from 'react'
import $ from 'jquery'
class Tile extends React.Component {
constructor(props) {
super(props)
this.state = {
paths: [],
fills: [],
transforms: [],
strokeWidths: [],
foo: ["1234", "2345"]
}
}
componentDidMount() {
var self = this;
$.get("xml/svg.xml", (xml) => {
$(xml).find('path').each((index, path) => {
self.setState({ paths: [...self.state.paths, $(path).attr('d')] })
self.setState({ fills: [...self.state.fills, $(path).attr('fill')] })
const transform = ($(path).attr('transform') !== undefined) ? $(path).attr('transform') : "translate(0 0)"
self.setState({
transforms: [...self.state.transforms, transform]
})
});
})
}
render() {
return (
<div className="tile">
<svg width="100%" height="100%" version="1.1" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
{this.state.paths.map((path, index) => {
<path d={path} transform={this.state.transforms[index]} fill={this.state.fills[index]} stroke={this.state.strokeWidths[index]}></path>
})}
</svg>
<svg width="100%" height="100%" version="1.1" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<path d={this.state.paths[1]}></path>
</svg>
</div>
)
}
}
export default Tile
SVG 文件:
<svg width="200" height="200" version="1.1" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<path d="m0-0.099609v19a19 19 0 0 0 19-19zm185 0.099609v15h15v-15zm15.041 170a30 30 0 0 0-30 30h30zm-200.04 15v15h15v-15z" fill="#d40000"/>
<path d="m128.81 97.034a30.508 28.39 0 0 1-30.508 28.39 30.508 28.39 0 0 1-30.508-28.39 30.508 28.39 0 0 1 30.508-28.39 30.508 28.39 0 0 1 30.508 28.39z" fill="#ff7fff" stroke-width="0"/>
</svg>
任何建议或参考将不胜感激。
【问题讨论】:
-
您是否遇到任何错误?我的猜测是在初始渲染时您可能会遇到一些未定义的错误。另外,在组件确实挂载时,我不会在 map 函数中调用 setState 。这将导致组件重新渲染永远添加的路径
-
我损失了 1 天,因为我有很多“不重要”的警告,其中我有一些非常重要的东西:“./src/components/designApp/Tile.jsx 第 34 行:预计返回箭头函数 array-callback-return 中的值 第 35 行:期望一个赋值或函数调用,而是看到一个表达式 no-unused-expressions"。我错过了箭头函数的返回,因为我使用的是 {} 而不是 (),无论它看起来多么微不足道,我都不会忽略警告。非常感谢。
标签: javascript jquery reactjs svg