当前位置: 首页 > 知识库问答 >
问题:

React-setState不更新值

通建安
2023-03-14

我正在尝试使用DidMount中的localStorage值更新状态,但它没有更新:

type Props = {
};

type State = {
    id_evaluation: string,
};

class Evaluation extends Component < Props, State > {
    state = {
        id_evaluation: '',
    }

    componentDidMount() {
        const id_eval = getEvaluation();
        console.log('1 - ', id_eval)

        this.setState({
            id_evaluation: '1',
        });

        console.log('2 - ', this.state.id_evaluation)

在第一个console.log中,我的值为1,在第二个中,它保持为空,不更新状态。

共有3个答案

庄萧迟
2023-03-14

this.setState是一个异步函数。

 this.setState({
        id_evaluation: '1',
 }, () => console.log('2 - ', this.state.id_evaluation));

回调函数可以解决您的问题。

诸葛嘉熙
2023-03-14

setState异步工作,因此将console.log作为callback传递以获取更新状态。

this.setState({ id_evaluation: '1'}, () => console.log('2- ', this.state.id_evaluation));

当用作代码时,console.log('2-',this.state.id_evaluation)正在打印以前的状态,而不是更新的状态。

郜卓君
2023-03-14

这是因为您在状态更新之前调用console.log。试试这个:

this.setState({
  id_evaluation: '1',
}, () => {
  console.log('2 - ', this.state.id_evaluation);
});

请参阅此线程:

是否可以在setState完成更新后执行函数?

 类似资料:
  • 所以我有这个: 只是一个数组的数字例如然而没有给出正确的总数,但?我甚至放了一个超时延迟,看看这是否解决了问题。任何明显的还是我应该发布更多的代码?

  • 我试图在if语句中设置状态,但它不会这样做。结果,我需要从if语句中更新状态,在那个里我可以接收经度和纬度坐标,但它不会保存状态。若我在If语句之外的控制台中回显,我将只读取第一个setState值表单componentWillMount。有什么问题吗?我做错了什么?结构如下:

  • 我试图将“加载”的状态从true更改为false,但当我调用一个函数并在该函数中设置“this.setState({loading:false})”时,加载状态仍然保持true。 在下面的代码中,当按钮按钮函数被调用时,它将“加载”状态设置为真,但当用户成功登录“加载”状态时,应该变为假,这样我的渲染按钮函数将重新渲染,旋转器可以隐藏自己并显示按钮。 为什么LoginSAccess函数中的“加载”

  • 是否可以使用更新对象的属性? 类似于: 我试过: 还有这个: 第一个会导致语法错误,而第二个则什么也不做。有什么想法吗?

  • 问题内容: 是否有可能用更新对象的属性? 就像是: 我努力了: 还有这个: 第一个导致语法错误,第二个则什么都不做。有任何想法吗? 问题答案: 有多种方法可以执行此操作,因为状态更新是异步操作,因此要更新状态对象,我们需要使用带有updater函数。 1-最简单的一个: 首先创建的副本,然后执行以下更改: 除了使用,我们还可以这样写: 2-使用 扩展运算符: 注意: 并且仅创建浅表副本,因此,如果