react-ネイティブAPIとの通信
13254 ワード
What is Rest API ?
Representational State Transfer APIの略で、リソースの状態(情報)を名前で区切って交換するすべてのコンテンツを指す.
改めてまとめると、HTTP URIによりリソースが指定され、HTTPメソッド(POST、GET、PUT、DELETE)によりそのリソースに対してCRUD操作が適用されることを意味する.
Rest APIは、リソース、動作、および表現から構成される.
リソースを区別するIDは、「/group/group id」などのHTTP URIである.
リソース名は、動詞ではなく名詞を使用します.
CRUDはGET、POST、PUT、DELETEにより実現される.
ex) GET/members/1
クライアントがリソースステータス(情報)の操作を要求すると、サーバは対応する応答を送信します.
RESTでは、1つのリソースは、JSON、XML、TEXT、RSSなど、様々な形で表示することができる.
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://meetup.toast.com/posts/92
React-ネイティブを使用したデフォルトの画面構成の作成
figmaを使用して簡単にプロトタイプを作成し、主な機能を実現するための2つの画面を作成します.(ナビゲーションのみ)
準備完了のREST API
apiにaxiosというインストール名のライブラリが正式に呼び出されます.
(糸ではなくnpmでインストールされているので、プロジェクトファイルにインストールする必要があります)
$ npm install axios
インストールが完了したらapp.axiosをjsにインポートします.import axios from 'axios';
次に、応答関数としてuseStateとuseEffectをインポートします.import React, { useState, useEffect } from 'react';
分散サーバからのURI構造の表示
まず,サーバが提供するURIの構造を調べる.私が使っているURIは以下のような構造で構成されています.
{"data":[
{
"id":1,
"title":"기사제목",
"writer":"기자",
"date":"작성일",
"company":"언론사",
"img":"기사사진",
"article_origin":["기사원문"],
"article_extractive":["추출요약"],
"article_hashtag":"해시태그",
"category":"카테고리"
}, ...
]}
上記のuseStateを使用して、通信中に必要な変数を定義します.const [news, setNews] = useState('');
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
ニュースuriにおけるニュースデータを持つ変数load-通信Loading状態の変数
Error-ロード中にエラーが発生した場合、エラー内容を含む変数
uriからデータをロードし、news変数のコードに入れます。
const fetchNews = async () => {
try {
// 요청이 시작 할 때에는 error 와 users 를 초기화하고
setError(null);
setNews(null);
// loading 상태를 true 로 바꿉니다.
setLoading(true);
const response = await axios.get(
'http://uri_주소'
);
// 데이터는 response.data.data 안에 들어있다.
setNews(response.data.data);
} catch (e) {
setError(e);
}
// loading 끄기
setLoading(false);
};
// 첫 렌더링 때 fetchNews() 한 번 실행
useEffect(() => {
fetchNews();
}, []);
注意if (loading) return <View style={{margin: 50, width: 300, height: 200}}><Text>로딩 중..</Text></View>;
if (error) return <View style={{margin: 50, width: 300, height: 200}}><Text>에러가 발생했습니다.</Text></View>;
if (!news) return null;
ロード時、エラーが発生した場合、ニュースデータがない場合、またはロードが正しくない場合に発生する文.<ScrollView style={styles.scrollContainer} horizontal={true} showsHorizontalScrollIndicator={false} >
{news.filter(user => user.category == 'politic').map(user => (
<View style={styles.newsContainer}>
<View style={styles.companyHeader}><Text key={user.id} style={styles.companyText}>{user.company}</Text></View>
<TouchableOpacity activeOpacity='1' onLongPress={function () {navigation.push('Detail', {id: user.id})}} style={styles.article}>
<View><Text key={user.id} style={styles.artTitle}>{user.title}</Text></View>
<View><Image key={user.id} style={styles.artImage} source={{uri: user.img }}/></View>
<View style={styles.artContentContainer}>
<View><Text key={user.id} style={styles.artContent}>{user.article_extractive}</Text></View>
<View><Text key={user.id} style={styles.artInfo}>{user.writer}</Text></View>
</View>
</TouchableOpacity>
</View>
))}
</ScrollView>
newsに格納されているデータではcategoryは政治データ(.filter)のみをフィルタリングし、対応するニュースをscrollviewにリストしたコードにします.map関数を使用して、各ニュースデータを<ビュー>のコードリストに変換します.コードを完了して実行すると、上記の接続の良い画面が完了します.
Reference
この問題について(react-ネイティブAPIとの通信), 我々は、より多くの情報をここで見つけました https://velog.io/@guel/react-native와-Rest-API-통신하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol