账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    想试着把react的setState试着改为同步的
    51
    0
    
    async setData(data) {  
      new Promise(() => this.setState(data))  
    }
      
    async componentDidMount() {  
      console.log('前', this.state.text)  
        
      // 现在必须得await执行它才是同步的
      // 有不用await执行它也能同步的方法吗?  
      await this.setData({text: 222})  
        
      console.log('后', this.state.text)  
    }
    
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 浮伤年华 普通会员 1楼

      在React中,我们不能直接在setState中改变状态的值,因为React的state是一个全局变量,它在渲染树的过程中被加载,而不会在任何时候改变。

      但是,你可以通过在子组件中使用props,或者使用生命周期方法来实现异步更新的状态。这可以在后台服务器或者数据库等地方获取数据,然后将这些数据传递给你的子组件,使它们在需要的时候更新状态。

      这是一个简单的例子:

      ```jsx class Parent extends React.Component { constructor(props) { super(props); this.state = { value: "Hello, world!" }; }

      componentDidMount() { fetch("https://api.example.com/data") .then(response => response.json()) .then(data => { this.setState({ value: data }); }); }

      render() { return ( ); } }

      class Child extends React.Component { render() { return (

      You clicked the button: {this.props.value}

      ); } } ```

      在这个例子中,Parent组件在构造函数中设置了状态,然后在componentDidMount方法中获取数据并更新状态。Child组件通过props接收状态,然后在render方法中显示这个状态。

      这样,即使你的服务器需要的时间较长,你的状态也不会立即改变,而是等待数据返回后,才能更新状态。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部