【发布时间】:2017-05-03 14:26:01
【问题描述】:
我试图理解, 我知道当我在 console.log(pictures) 得到最终结果时
当我“console.log(JSON.stringify(pictures))”时,我得到了当前的那个。
为什么在记录第二个选项的那一刻,数组是空的 最后它得到了一个值,
如何强制同步 value 和 this.state
问题是当我最后发送时:
ImageList pics={this.state.picturesArr} />
发送的是空的
let pictures = [];
let urls =[];
let titles=[];
let nextpage ='';
let pageback='';
class App extends Component {
constructor(props) {
super(props);
this.state = {
picturesArr: [],
urlArr: [],
titleArr:[],
nextPage:'',
prevuisPage:''
};
this.loadSubreddit = this.loadSubreddit.bind(this);
}
loadSubreddit(subre) {
reddit.hot(subre).limit(5).fetch(function(res) {
console.log(res);
nextpage = res.data.after.toString();
// pageback = res.data.before.valueOf();
for (let i = 0; i < res.data.children.length; i++){
pictures.push(res.data.children[i].data.url);
urls.push(res.data.children[i].data.permalink);
titles.push(res.data.children[i].data.title);
}
});
this.setState({
picturesArr: pictures,
urlArr: urls,
titleArr: titles,
nextPage: nextpage,
prevuisPage: pageback
}, () => {
console.log(this.state)
});
console.log(pictures);
console.log(JSON.stringify(pictures));
}
componentWillMount() {
console.log('comp is mounting');
this.loadSubreddit('cats');
}
render() {
return (
<div className="App">
<div className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h2>Welcome to React</h2>
</div>
<Col sm={8} md={10} smOffset={2} mdOffset={1} >
<ImageList pics={this.state.picturesArr} />
</Col>
</div>
);
}
}
export default App;
【问题讨论】:
-
How do I return the response from an asynchronous call? 的可能重复项您正在尝试以同步方式使用异步结果。这是不可能的。您需要在回调中调用 setState。
标签: javascript reactjs create-react-app