我是反应原生的新手,我在这里尝试在加载组件时更新状态。但是州没有更新。
constructor(props) {
super(props);
this.state = {
selectedSection: 'None',
sectionObject: { index: 0, key: ''},
sectionIndex: 0,
sectionArray: [],
};
}
componentDidMount()
{
this.setState({
sectionObject: { index: this.state.sectionIndex, key: this.state.selectedSection},
sectionArray: this.state.sectionArray.concat(this.state.sectionObject),
})
console.log('sectionObject:',this.state.sectionObject);
console.log('section array:',this.state.sectionArray);
}
我在这里做错了什么?
答案 0 :(得分:0)
当您尝试登录时,您可以看到旧值。尝试登录setState回调之类的
this setState({ key: value }, () => console.log(this.state));
。
看看这个:https://reactjs.org/docs/react-component.html#setstate
,https://medium.learnreact.com/setstate-takes-a-callback-1f71ad5d2296
答案 1 :(得分:-1)
<强>更新强>
componentDidMount更新状态,但这是一个异步,所以你可以在渲染中看到更新的状态。
class Hello extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedSection: 'None',
sectionObject: { index: 0, key: '' },
sectionIndex: 0,
sectionArray: [],
};
}
componentDidMount() {
this.setState({
selectedSection: 'Wowowowowow',
})
}
render() {
console.log(this.state.selectedSection)
return <div>{this.state.selectedSection}</div>
}
}
ReactDOM.render(
<Hello name='World' />,
document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container"></div>