我正在尝试从API提取显示图片
btw url
已定义
fetch(url).then((res) => {
res.blob()
.then((img) => {
console.log(img)
const objectURL = URL.createObjectURL(img);
const url = objectURL.replace(/[blob:]{5}/gi,'')
ReactDOM.render(<Gallery photos={url} />, document.getElementById('root'));
});
})
Gallery.js
import React, { Component } from 'react';
class Gallery extends Component {
constructor (props) {
super(props);
this.state = {
Images: []
}
}
componentDidMount () {
this.setState({images: this.props.photos});
}
render() {
const {image} = this.props.photos;
return (
<div >
<img
className="App"
width="300"
height="300"
src={image}
alt="dogs"/>
</div>
);
}
}
export default Gallery;
无论是否带有正则表达式/[blob:]{5}/gi
,它仅显示alt
属性,而不显示图像。图像已收到并且get调用成功,但是objectURL
url不起作用。有帮助吗?
答案 0 :(得分:1)
const {image} = this.props.photos;
等同于
const image = this.props.photos.image;
这意味着“将image
的属性this.props.photos
分配给变量image
” 。
但是,this.props.photos
是字符串。字符串没有image
属性。你只是想要
const image = this.props.photos;
您没有对this.state.Images
做任何事情,因此可以删除构造函数和componentDidMount
。
/[blob:]{5}/gi
不会执行您想要的操作。这意味着“匹配由b
,l
,o
或:
组成的5个字符的所有序列”
即字符序列bb:ol
将匹配。
如果要删除字符串开头的序列blob:
,则应改用/^blob:/i
。
但是,您不应从网址中删除blob:
。
完整和简化的示例
import React, { Component } from 'react';
function Gallery(props) {
return (
<div >
<img
className="App"
width="300"
height="300"
src={props.image}
alt="dogs"
/>
</div>
);
}
fetch(url)
.then(res => res.blob())
.then(img => {
ReactDOM.render(
<Gallery image={URL.createObjectURL(img)} />,
document.getElementById('root'),
);
})