Я очень новичок в JS.
Вот страница, над которой я работаю:
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { connect } from 'react-redux'
import Plot from 'react-plotly.js';
import { fetchPosts, createPost } from '../actions/postActions'
import GroupedBarChart from '../containers/GroupedBarChart'
class Usage extends Component {
state = {
title: '',
resp_data: [],
}
componentDidMount() {
this.props.fetchPosts('/en/api/usage/')
}
componentWillReceiveProps (nextProps) {
if (nextProps.posts.data) {
this.setState({resp_data: nextProps.posts.data}, function () {
console.log(this.state.resp_data);
});
}
console.log(this.state.resp_data)
}
render() {
const { title, resp_data } = this.state
return (<div>
<GroupedBarChart
title={ title }
data={ resp_data }
/>
</div>);
}
}
const mapStateToProps = state => ({
posts: state.posts.items,
newPost: state.posts.item
})
export default connect(mapStateToProps, { fetchPosts, createPost })(Usage)
Проблема в том, что в какой-то момент состояние неожиданно меняется.
Так что в componentWillReceiveProps
сразу после вызова setState
есть console.log
, и вывод этого console.log - именно то, что я ожидаю. Однако, если я распечатываю состояние сразу после оператора if:
if (nextProps.posts.data) {
this.setState({resp_data: nextProps.posts.data}, function () {
console.log(this.state.resp_data);
});
}
this.state.resp_data
- пустой массив.
Вывод двух console.logs выглядит следующим образом:
[] # this is outside if
(2) [{…}, {…}] # this is inside if
Может кто-нибудь объяснить мне, почему это происходит и как я могу это преодолеть?
Заранее спасибо.