当前位置: 首页 > 面试题库 >

反应this.setState不是一个函数

厉成仁
2023-03-14
问题内容

我是React的新手,正在尝试编写使用API​​的应用程序。我不断收到此错误:

TypeError:this.setState不是一个函数

当我尝试处理API响应时。我怀疑此绑定有问题,但我不知道如何解决它。这是我组件的代码:

var AppMain = React.createClass({
    getInitialState: function() {
        return{
            FirstName: " "
        };
    },
    componentDidMount:function(){
        VK.init(function(){
            console.info("API initialisation successful");
            VK.api('users.get',{fields: 'photo_50'},function(data){
                if(data.response){
                    this.setState({ //the error happens here
                        FirstName: data.response[0].first_name
                    });
                    console.info(this.state.FirstName);
                }

            });
        }, function(){
        console.info("API initialisation failed");

        }, '5.34');
    },
    render:function(){
        return (
            <div className="appMain">
            <Header  />
            </div>
        );
    }
});

问题答案:

回调是在不同的上下文中进行的。您需要这样做bind才能this在回调内部进行访问:

VK.api('users.get',{fields: 'photo_50'},function(data){
    if(data.response){
        this.setState({ //the error happens here
            FirstName: data.response[0].first_name
        });
        console.info(this.state.FirstName);
    }

}.bind(this));

编辑:看起来您必须同时绑定initapi调用:

VK.init(function(){
        console.info("API initialisation successful");
        VK.api('users.get',{fields: 'photo_50'},function(data){
            if(data.response){
                this.setState({ //the error happens here
                    FirstName: data.response[0].first_name
                });
                console.info(this.state.FirstName);
            }

        }.bind(this));
    }.bind(this), function(){
    console.info("API initialisation failed");

    }, '5.34');


 类似资料:
  • 当前组件的值为false。捕获scroll事件时,它会查看,如果它的,它会执行一些操作。 我希望在操作再次发生之前有某种静态延迟,这就是为什么在函数中,被设置为并将阻止下一个的当前方法的进一步逻辑,直到返回到。 但当前发生以下错误,未捕获TypeError:在内部调用时,This.SetState不是函数。

  • 问题内容: 当前组件的值为false。捕获滚动​​事件时,它会查看,如果有,它会做一些事情。 我想在动作再次发生之前有某种静态延迟,这就是为什么将内部函数设置为并将阻塞当前方法的进一步逻辑的原因,直到返回到。 但在当前时刻出现以下错误 遗漏的类型错误:this.setState不是一个函数 时被内部调用。 问题答案: 您正在失去上下文。使用箭头功能作为保留适当执行上下文的简单方法: 请记住,除非您

  • 问题内容: 我有以下组件,该组件维护在特定元素上触发事件时更新的状态,并且在更新状态时将其作为道具传递给另一个组件。我目前正在尝试为什么我得到以下错误“ this.setState不是函数”,它很可能没有绑定到正确的上下文。但是我不确定,我这样做正确吗? 编辑: 我只是意识到上下文会在“onreadyStateChange”函数时发生更改,所以我在searchGif中做了以下操作 问题答案: 您正

  • 我有以下组件,它维护当事件在特定元素上被激发时更新的状态,并且当状态被更新时,它将作为道具传递给另一个组件。我正在尝试为什么会出现以下错误“this.setstate is not a function”,它很可能没有绑定到正确的上下文。但我不确定这一点,我这样做对吗? 编辑:我刚刚意识到当“onreadystatechange”函数时上下文会发生变化,所以我在searchGif中做了以下操作

  • 我对从我的组件调用异步操作有问题,我想我做了工作所需的一切,但似乎没有,我使用了: 将调度映射到属性 在里面我回来了 操作:bindActionCreators(fetchPosts,调度) 我把它连接起来。 在所有这些事情之后,我试着在我的组件中调用这个动作- this . props . actions . fetch post() 结果我在控制台中收到这个错误- this.props.act

  • 对不起,我能看到这个问题本问了好几次。我以前解决过这个问题,但我知道我正在以一种新的方式看待它。 这是我在流量存储中的构造函数: 下面是我通过TodoActions.fuction子组件中的Name调用的一些函数: 我得到