setState 不会立即更新状态 [英] setState doesn't update the state immediately

查看:35
本文介绍了setState 不会立即更新状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想问一下为什么当我执行 onClick 事件时我的状态没有改变.我前段时间搜索过,我需要在构造函数中绑定 onClick 函数,但状态仍未更新.

这是我的代码:

从'react'导入React;从react-bootstrap/lib/Grid"导入网格;从'react-bootstrap/lib/Row'导入行;从'react-bootstrap/lib/Col' 导入 Col;从'components/board/BoardAddModal.jsx'导入BoardAddModal;从styles/boarditem.css"导入样式;类 BoardAdd 扩展了 React.Component {构造函数(道具){超级(道具);this.state = {boardAddModalShow: 假};this.openAddBoardModal = this.openAddBoardModal.bind(this);}openAddBoardModal() {this.setState({ boardAddModalShow: true });//设置 boardAddModalShow 为 true/* 设置新状态后,它仍然返回一个假值 */console.log(this.state.boardAddModalShow);}使成为() {返回 (<Col lg={3}><a href="javascript:;";className={style.boardItemAdd}onClick={this.openAddBoardModal}><div className={[style.boardItemContainer,style.boardItemGray].join(' ')}>创建新板

</a></Col>);}}导出默认 BoardAdd

解决方案

这个回调真的很乱.只需使用异步等待:

异步 openAddBoardModal(){等待 this.setState({ boardAddModalShow: true });console.log(this.state.boardAddModalShow);}

I would like to ask why my state is not changing when I do an onClick event. I've search a while ago that I need to bind the onClick function in constructor but still the state is not updating.

Here's my code:

import React from 'react';
import Grid from 'react-bootstrap/lib/Grid';
import Row from 'react-bootstrap/lib/Row';
import Col from 'react-bootstrap/lib/Col';
import BoardAddModal from 'components/board/BoardAddModal.jsx';    
import style from 'styles/boarditem.css';

class BoardAdd extends React.Component {
    constructor(props) {
        super(props);    
        this.state = {
            boardAddModalShow: false
        };    
        this.openAddBoardModal = this.openAddBoardModal.bind(this);
    }

    openAddBoardModal() {
        this.setState({ boardAddModalShow: true }); // set boardAddModalShow to true

        /* After setting a new state it still returns a false value */
        console.log(this.state.boardAddModalShow);   
    }

    render() {    
        return (
            <Col lg={3}>
                <a href="javascript:;" 
                   className={style.boardItemAdd} 
                   onClick={this.openAddBoardModal}>
                    <div className={[style.boardItemContainer,
                                     style.boardItemGray].join(' ')}>
                        Create New Board
                    </div>
                </a>
            </Col>
        );
    }
}

export default BoardAdd

解决方案

This callback is really messy. Just use async await instead:

async openAddBoardModal(){
    await this.setState({ boardAddModalShow: true });
    console.log(this.state.boardAddModalShow);
}

这篇关于setState 不会立即更新状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆