React中的Promise中的setState

时间:2017-11-06 02:57:22

标签: javascript reactjs

我的React代码中有一个函数,如下所示:

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

        var response = responseText.json();

        response.then(function(response){
            this.setState({ attachment: response });
        });
    }.bind(this));
}

但是当我编译时我收到一个错误,说我在.bind(this)有一个意外的令牌。任何想法,如何在承诺中设置状态?

3 个答案:

答案 0 :(得分:6)

您可以将引用范围限定为this,而不是绑定var that = this; 。像

that.setState

然后引用Map<String, String> i18Map = new HashMap<>(); map.put("open", "open"); // English map.put("abierto", "open"); // Spanish map.put("ouvrir", "open"); // French // other words/languages

答案 1 :(得分:3)

这是因为你在函数内部有不同的范围。使用函数时,它具有自己的范围。并且&#34;这个&#34;在函数内部使用它时,函数使用不一样。这样做的最好方法是使用变量&#34;&#34;并指定前一个&#34;这个&#34;到&#34;那&#34;。

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>;
     }


}

答案 2 :(得分:1)

尝试将getAttachment功能更改为 getAttachment = (url) => {...}并删除.bind(this)