【发布时间】:2020-01-22 13:25:52
【问题描述】:
我有一个组件 App.js,它有一个带有 credential 的 fetch api。在渲染中,如果最后一个视图是 1 个打开的图像视图组件,我有条件,否则转到图库组件
喜欢这个 Condition 现在这个问题是,当 app.js 在第二次加载 api 加载并第一次渲染工作时,然后再次获取 api 获取数据并且 ImageView this.state.data 为空,因此在 imageView 组件中我无法获取道具。
API调用服务文件
import fetchival from 'fetchival';
const CLIENT_ID = 'your id';
const apiBase = 'https://api.imgur.com/3';
const request = fetchival(apiBase, {
mode: 'cors',
headers: {
Authorization: 'Client-ID ' + CLIENT_ID
}
});
export function searchGallery(section = 'hot',) {
return request('gallery/' + section ).get();
}
App.js 主文件
async loadImages(section,sort,page = 0) {
try {
let result = await searchGallery(section, sort, page);
this.setState({data: result.data, page: page, loaded: true});
} catch (e) {
}
}
onClick = (e) => {
e.preventDefault()
this.loadImages(e.target.text.toLowerCase());
}
componentDidMount() {
this.loadImages();
}
render() {
return (
<div className="warpper">
this.state.imageView ?
<ImageView {...this.state.data[this.state.activeID]}
_closeImageView={this._closeImageView.bind(this)} />
:
<Gallery data={this.state.data}
_openImageView={this._openImageView.bind(this)} />
</div>
)
Image View Component is not geting this.props from app js
class ImageView extends React.Component {
render() {
return (
<div className="imageview-wrapper fadeIn">
<div className="imageview">
<Image CSSClass="imageview-image"
src={this.props.src}
alt={this.props.name} />
<div className="imageview-info">
<button className="imageview-close" onClick={this.props._closeImageView}>x</button>
<h2>{this.props.name}</h2>
<p>{this.props.desc}</p>
<h3>Tags</h3>
<ul>
{this.props.tags.map(tag => <li>{tag}</li>)}
</ul>
</div>
</div>
</div>
)
}
}
【问题讨论】:
-
我不清楚你在问什么。异步请求就是这样,异步——你需要在异步请求完成之前处理渲染。
-
我同意@Dave Newton,请澄清您的问题,我不太确定您的问题是什么。
-
@DaveNewton 问题是第一个数据应该来自 api 渲染应该可以工作,但在我的情况下,首先我将状态设为 null 然后渲染开始,然后当我第二次获得状态数据然后再次渲染工作当我点击时,使
-
我的请求是异步的——你必须能够在数据可用之前处理渲染,或者重新架构。
标签: javascript reactjs fetch