Vue.js + axios에서 Qiita API v2를 두드려 게시물 얻기

검증 환경


  • Vue.js (v2.4.2)
  • axios (v0.16.2)

  • gulp에서 트랜스파일러를 사용한 상태에서 검증하고 있습니다.

    공식 링크


  • Qiita API v2 문서
  • mzabriskie/axios

  • axios 설치


    npm install axios --save
    

    작성 화면



    로드 버튼을 눌러 링크가 있는 게시물 제목과 태그를 가져옵니다.



    소스 코드



    index.html
    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>Qiita Posts | Vue.js + axios test</title>
        <link rel="stylesheet" href="/css/main.css">
        <script src="https://unpkg.com/vue"></script>
        <script src="/js/main.js" charset="utf-8" async></script>
    </head>
    <body>
        <section id="qiita-posts">
            <h1>Qiita Posts</h1>
            <button v-on:click="request">読み込み</button>
    
            <hr>
    
            <ul>
                <li v-for="post in posts" >
                    <span class="tag" v-for="tag in post['tags']">{{ tag['name'] }}</span>
    
                    <a v-bind:href="post['url']" target="_blank" rel="noopener noreferrer">
                        <div>{{ post['title'] }}</div>
                    </a>
                </li>
            </ul>
        </section>
    </body>
    </html>
    

    main.scss
    body {
        padding: 0 10px;
    }
    
    #qiita-posts {
        h1 {
            margin-bottom: 20px;
            font-size: 1.2rem;
            font-weight: bold;
        }
    
        button {
            margin-bottom: 10px;
            padding: 4px 10px;
            color: #fff;
            font-size: 0.75rem;
            background: #325d7c;
            border: none;
            border-radius: 2px;
            box-shadow: 0 4px 0 darken( #325d7c, 4% );
            cursor: pointer;
        }
    
        li {
            margin-bottom: 15px;
            line-height: 1.5;
    
            .tag {
                display: inline-block;
                margin: 0 1px 6px;
                padding: 2px 6px;
                color: #fff;
                font-size: 0.75rem;
                background: #7daaca;
            }
    
            a {
                color: darken( #7daaca, 24% );
            }
        }
    }
    

    main.js
    'use strict';
    
    import axios from 'axios';
    
    let vm = new Vue( {
        el: '#qiita-posts',
        data: {
            posts: void(0),
        },
        methods: {
            request: () => {
                axios.get( 'https://qiita.com/api/v2/users/[QiitaユーザID]/items' )
                    .then( ( res ) => {
                        vm.posts = res.data;
                    } )
                    .catch( ( res ) => {
                        console.error( res );
                    } );
            }
        },
    } );
    

    검색된 데이터 구조에 대한 자세한 내용은 Qiita API v2 문서 - 게시물을 참조하십시오.

    결론



    Vue.js의 공부 드디어에 실장해 보았습니다만, axios와 조합하면 Ajax 주위의 처리가 너무 간단해서 놀라울 뿐입니다.

    좋은 웹페이지 즐겨찾기