इसलिए, मैं http अनुरोध के माध्यम से अपने बैकएंड पर भेजने से पहले अपने प्रॉप्स स्टेट को बदलना चाहता हूं, लेकिन एक्सियोस मेरे स्टेटमेंट कोड निष्पादित होने से पहले उन स्टेट को भेज देता है। मुझे इस async चीज़ की समझ नहीं है। यहाँ कोड है

login(){
    const url = 'https://myapi.execute-api.ap-southeast-1.amazonaws.com/stage/resource';
    this.setState(()=>{
      if (this.state.email.indexOf('@') == -1){
        return {email: ''}
      } else {
        return {username: ''}
      }
    })
    axios.post(url, this.state).then(response => {
      if (response.data["message"])
        this.setState({message: response.data["message"]})
      else
        this.setState({message: response.data["token"]})
    })
  }

क्या किसी के पास कोई उपाय है?

0
Sulthan Alam 20 नवम्बर 2019, 11:17

1 उत्तर

सबसे बढ़िया उत्तर

आप इसे इस तरह से कर सकते हैं। पहले स्टेट सेट किया जाता है, फिर एक्सिस रिक्वेस्ट की जा रही है। setState फ़ंक्शन में दूसरे पैरामीटर के रूप में कॉलबैक होता है।

react दस्तावेज़ीकरण पर भी एक नज़र डालें: https://reactjs.org /docs/react-component.html#setstate

login(){
    const url = 'https://myapi.execute-api.ap-southeast-1.amazonaws.com/stage/resource';
    this.setState(()=>{
        if (this.state.email.indexOf('@') == -1){
            return {email: ''}
        } 
        else {
            return {username: ''}
        }
    },() => {
        axios.post(url, this.state).then(response => {
        if (response.data["message"])
            this.setState({message: response.data["message"]})
        else
            this.setState({message: response.data["token"]})
        })
    });
}
4
dns_nx 20 नवम्बर 2019, 11:19