React native 反应本机设置状态不异步更新状态 从“React”导入React; 从“react native”导入{View}; 从“反应本机按钮”导入按钮; 常量gData=[{计数器:0}]; 导出默认类App扩展React.Component{ 建造师(道具) { 超级(道具); this.state={data:{}}; log(“构造函数:”,this.state.data); } _女佣() { 控制台日志(“按下按钮”) gData[0]。计数器+=1; console.log(“设置状态之前:”,gData); this.setState({data:gData},console.log(“在setState:,this.state.data之后”); } render(){ 返回( 这个。_handlePress()}> 按我! ); } }

React native 反应本机设置状态不异步更新状态 从“React”导入React; 从“react native”导入{View}; 从“反应本机按钮”导入按钮; 常量gData=[{计数器:0}]; 导出默认类App扩展React.Component{ 建造师(道具) { 超级(道具); this.state={data:{}}; log(“构造函数:”,this.state.data); } _女佣() { 控制台日志(“按下按钮”) gData[0]。计数器+=1; console.log(“设置状态之前:”,gData); this.setState({data:gData},console.log(“在setState:,this.state.data之后”); } render(){ 返回( 这个。_handlePress()}> 按我! ); } },react-native,setstate,React Native,Setstate,嗨, 我有一个简单的react本机应用程序代码,它在屏幕上创建了一个按钮,按下该按钮后,它将更新对象内的计数器,并将对象存储在状态中。但是,当我运行应用程序并按下按钮时,我会在日志中看到: 晚上11:19:43:在为x86_64构建的Android SDK上运行应用程序 晚上11:19:43:构造函数:{} 晚上11:23:20:按下按钮 晚上11:23:20:设置状态之前:[{“计数器”:1}] 晚上11:23:20:setState之后:{} 因此,由于某些原因,状态没有更新。有人知道是什么

嗨, 我有一个简单的react本机应用程序代码,它在屏幕上创建了一个按钮,按下该按钮后,它将更新对象内的计数器,并将对象存储在状态中。但是,当我运行应用程序并按下按钮时,我会在日志中看到:

晚上11:19:43:在为x86_64构建的Android SDK上运行应用程序

晚上11:19:43:构造函数:{}

晚上11:23:20:按下按钮

晚上11:23:20:设置状态之前:[{“计数器”:1}]

晚上11:23:20:setState之后:{}


因此,由于某些原因,状态没有更新。有人知道是什么情况吗?

如果您像这样调用console.log,它将立即被调用,而不是在状态更新完成后立即被调用,请尝试将其放入匿名函数中:

import React from 'react';
import {View}  from 'react-native';
import Button from 'react-native-button';

const gData  = [{counter: 0}];

export default class App extends React.Component {

  constructor(props)
  {
    super(props);
    this.state = {data: {}};
    console.log("Constructor: ", this.state.data);
  }
  _handlePress()
  {
    console.log("Pressed Button")
    gData[0].counter += 1;
    console.log("Before setState: ", gData);
    this.setState({data: gData}, console.log("After setState: ", this.state.data));
  }

  render() {
    return (
      <View style={{flex:1, justifyContent: 'center',}}>
        <Button
          onPress={() => this._handlePress()}>
          Press Me!
        </Button>
      </View>
    );
  }
}

你是对的!谢谢他们总是说第二个参数是更新完成后的回调,因此很容易忽略需要匿名函数包装它。至少如果你是像我这样的新手。。。
    this.setState({data: gData}, () => console.log("After setState: ", this.state.data));