在ComponentDidMount中调用的setState是不是正在更新状态?

时间:2018-02-15 07:22:54

标签: javascript reactjs react-native

我是反应原生的新手,我在这里尝试在加载组件时更新状态。但是州没有更新。

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);
}

我在这里做错了什么?

2 个答案:

答案 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>