[英]Console.log() shows undefined before getting data
我似乎有一个生命周期钩子问题,我似乎无法解决。
export default class EditRevision extends Component {
state = {
data: [],
customColumns: []
}
componentWillMount = () => {
axios.get('http://localhost:8080/lagbevakning/revision/subscriptions?id=' + (this.props.match.params.id)).then(response => {
this.setState({
data: response.data,
loading: false
})
})
}
render() {
/* THIS IS THE CONSOLE.LOG() I AM REFERRING TO */
console.log(this.state.data.subscriptionRevisionDTOS)
return (
<div></div>
)
}
}
这是我在渲染组件时的日志 https://i.gyazo.com/9dcf4d13b96cdd2c3527e36224df0004.png
它是未定义的,然后按照我的意愿检索数据,然后它再次未定义。
非常感谢有关导致此问题的原因的任何建议,谢谢。
替换这个:
componentWillMount = () => {
axios.get('http://localhost:8080/lagbevakning/revision/subscriptions?id=' + (this.props.match.params.id)).then(response => {
this.setState({
data: response.data,
loading: false
})
})
有:
constructor(props){
super(props)
this.state = {
data: [],
customColumns: []
}
axios.get('http://localhost:8080/lagbevakning/revision/subscriptions?id=' + (this.props.match.params.id)).then(response => {
this.setState({
data: response.data,
loading: false
})
})
}
尝试在构造函数或componentDidMount()中调用axios(不应使用componentWillMount)。 未定义的结果是由异步调用引起的。 看起来你有很多不受控制的渲染。 尝试添加一个shouldComponentUpdate函数或在PureComponent中转换您的组件
export default class EditRevision extends Component {
state = {
data:{subscriptionRevisionDTOS:[]},
customColumns: []
}
componentDidMount = () => {
axios.get('http://localhost:8080/lagbevakning/revision/subscriptions?id=' +
(this.props.match.params.id)).then(response => {
this.setState({
data: response.data,
loading: false
})
})
render() {
/* THIS IS THE CONSOLE.LOG() I AM REFERRING TO */
console.log(this.state.data.subscriptionRevisionDTOS)
return (
<div></div>
)
}
看到这应该是这样的
你有初始状态
state = {
data: [],
customColumns: []
}
这里this.state.data
是空数组,它没有subscriptionRevisionDTOS的定义,这就是为什么你得到this.state.data.subscriptionRevisionDTOS
undefined
。
同时,您的async
axios.get调用已完成, this.state.data
已使用subscriptionRevisionDTOS
更新。
一旦state
更新,再次调用render()并获得this.state.data.subscriptionRevisionDTOS
的正确值。
所以线下肯定会有效。
state = {
data:{subscriptionRevisionDTOS:[]},
customColumns: []
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.