setState inside Promise in React

后端 未结 3 1624
旧时难觅i
旧时难觅i 2021-01-12 21:47

I have a function in my React code defined like this:

getAttachment(url) {
    fetch(url).then((responseText) => {

        var response = responseText.js         


        
相关标签:
3条回答
  • 2021-01-12 22:16

    try changing the getAttachment function to getAttachment = (url) => {...} and delete .bind(this)

    0 讨论(0)
  • 2021-01-12 22:23

    This has because you have a different scope inside the function. When using a function it has it's own scope. And "this" used out side the function is not the same when you use it inside the function. The best way of doing this is having a variable "that" and assign the previous "this" to "that".

    class Hello extends React.Component {
        constructor(props) {
            super(props);
            this.getAttachment = this.getAttachment.bind(this);
            this.state = {attachmenet: ""};
        }
    
        getAttachment(url) {
    
             //Code you need to add
             var that = this;
    
             fetch(url).then((responseText) => {
    
                var response = responseText.json();
    
                response.then(function(response){
                   //code you need to change
                   that.setState({ attachment: response });
                });
             });
         }
    
         render() {
             this.getAttachment();
             return <div dangerouslySetInnerHTML={{__html:this.state.attachment}}>
           </div>;
         }
    
    
    }
    
    0 讨论(0)
  • 2021-01-12 22:31

    Instead of binding this you could just scope the reference to this. like

    var that = this;
    

    and then reference that.setState.

    0 讨论(0)
提交回复
热议问题