【发布时间】:2017-11-01 13:34:00
【问题描述】:
我正在尝试创建一个将图像元素更改为内联 svg 元素的 React 组件。我想这样做,以便我可以从文件中插入 svg 元素,以便使用 css 处理样式。
同样重要的是,我正在为我的项目使用 create-react-app 存储库,并且希望能够在不弹出项目的情况下执行此操作。
变量req 返回一个有效的svg 元素,我设置了this.state.response,然后我尝试更新它,但是很好......它不起作用。使用下面的代码,我得到以下错误:
A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.
代码:
class Svg extends Component {
constructor(props) {
super(props);
this.state = {
response: undefined
};
this.toSvg(this.props.src);
}
toSvg(img) {
const imageUrl = img;
let self = this;
// Create new XML Http Request to get data
let request = new XMLHttpRequest();
request.open('GET', imageUrl, true);
request.onreadystatechange = function() {
if (this.readyState === 4) {
if ((this.status >= 200) && (this.status < 400)) {
// Success!
// Returns the HTML object
let req = request.responseXML.getElementsByTagName('svg')[0];
self.setState({
response : req
});
} else {
// Error :(
}
}
};
request.send(null);
}
render() {
if (this.state.response === undefined) {
console.log('no response rendering standard img');
return <img src={this.props.src} alt='icon' />;
}
else {
console.log('now we update');
return this.state.response;
}
}
}
如果有人知道如何处理 svg 元素以替换 img 元素而不会出现错误,那就太棒了。
【问题讨论】:
标签: javascript html reactjs svg xmlhttprequest