美文网首页简单易懂的React魔法
简单易懂的React魔法(15):使用SuperAgent从gi

简单易懂的React魔法(15):使用SuperAgent从gi

作者: 誅诺 | 来源:发表于2017-08-18 17:22 被阅读38次

    我使用SuperAgent的原因之一是因为它使用起来非常简单,开发者的代码容易使用和理解是非常好的。一开始,首先引入SuperAgent:
    src/pages/Detail.js

    import ajax from 'superagent';
    

    注意:你可以给SpuerAgent取任意的名字,而它的示例通常给自己起名为request而不是ajax。我发现ajax比较好记,所以用这个。

    现在我们希望在页面加载时调用这个ajax,而react有个特殊的方法在页面加载时被调用:
    componentWillMount(). 显而易见从名字推测,这个方法在第一次渲染之前会被调用.使得它成为我们调用ajax请求的好地方。

    向你的组件里添加如下方法:

    src/pages/Detail.js

    componentWillMount() {
        ajax.get('https://api.github.com/repos/facebook/react/commits')
            .end((error, response) => {
                if (!error && response) {
                    this.setState({ commits: response.body });
                } else {
                    console.log('There was an error fetching from GitHub', error);
                }
            }
        );
    }
    

    我们来分析一下它到底做了什么…

    1. componentWillMount()是这个方法的名字,并且不能修改,因为react需要调用它。
    2. ajax.get(‘https://api.github.com/repos/facebook/react/commits’)告诉superAgent从github获取react项目的提交列表。我选择github是因为它们有一个简单的API并且不需要身份验证。
    3. .end((error, response) ⇒ {告诉superAgent在请求完成时该做什么,它应该运行下面的匿名函数。
    4. if (!error && response) {一个条件语句,只有当没有错误且服务器有响应时执行以下操作。
    5. this.setState({ commits: response.body })使用ajax获得的响应body部分更新我们组件的状态。
    6. } else { 另一部分的条件语句,在发生错误时要执行的语句。
    7. console.log(…)把错误打印出来。
    8. 很多大括号。

    为了理解这些代码,还需要知道两件事情。首先:所有superAgent调用都是异步的,这意味着当superAgent等待GitHub响应时,客户端不会等待。其他的代码会继续执行。当获取GitHub响应之后才会调用匿名函数。

    第二件要知道的事情是,response.body是superAgent的一个特性。它检测到GitHub响应内容类型为‘application/json’,并自动将响应转换为JavaScript对象。这就是为什么我们可以将response.body直接发送到我们的状态,因为已经处理为对象了。

    当你保存页面,你会在浏览器里看到很多行“Some commit data here “。每一行都是facebook在GitHub的commit数据。不过我们还没有处理这些commit,我们的JSX是静态的。

    15-1.jpg

    我们的app现在显示了“Some commit data here“ 30次,只是因为我们还没有告诉React该显示什么数据。

    相关文章

      网友评论

      • demo11:按照你的写法,可以输出返回的结果,但是我在js中写import axios from 'axios'; const HOST = "http://api.douban.com/v2";;, url = "/movie/search"; axios.get(HOST + url).then(response => { console.log(response); }); 还是存在跨域问题,请问这个怎么解决

      本文标题:简单易懂的React魔法(15):使用SuperAgent从gi

      本文链接:https://www.haomeiwen.com/subject/oobarxtx.html