如何在外部函数中使用setState?

时间:2017-06-07 08:20:52

标签: javascript reactjs

import Request from 'superagent';

const getApi = () => {
    let url = '/* URL */';
    return Request.get(url).then((res) => {
        this.setState({
             content: res.body
        });
    });
}

export default getApi;

我已在function的外部文件中创建了api call。如何在外部文件中访问function/setState

componentWillMount(){
   getApi();
}

我收到此错误:

  

' TypeError:无法读取属性' setState'未定义'

3 个答案:

答案 0 :(得分:4)

您可以将回调传递给组件中的TestName TotalMarks ScoreObtained Test1, Test2, Test3 100, 200, 150, 150 95, 65, 95, 函数。

getApi

<强>组件

const getApi = (onSuccess) => {
    let url = '/* URL */';
    return Request.get(url).then((res) => {
        onSuccess(res.body);
    });
}

NB。随着项目变得越来越大,您可能希望研究一个状态管理系统,例如Redux。

答案 1 :(得分:1)

从技术上讲,您可以将实例传递给 <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.17</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-core</artifactId> <version>2.17</version> </dependency> ,以便它知道getApi应该是什么。但是imo。这是一个糟糕的方法。它会创建不必要的依赖项。目前,this需要知道React类是如何工作的;该函数负责正确操作实例的状态。

如果getApi()仅返回值,并且实例使用它,则更好:

getApi()

答案 2 :(得分:0)

我的解决方案:

function getApi(component) {
        let url = '/* url */';
        return Request.get(url).then((res) => {
            component.setState({
                content: res.body,
            });
        });
    }
componentWillMount(){
   getApi(this);
}