いつも皆さんに助けていただいてます。ありがとうございます。
expressで作ったapiサーバーにて、取得した自分のツイートのtextを、reactで表示できずに悩んでいます。
参考動画を見ながら頑張っていますが、http-hook.jsが何をしているのかさっぱりで、loadedtweetsに、textが入っているらしいのですが、うまく取り出して表示することができません。
見様見真似で生半可な理解で進んでいるつけが回ってきている気がします。
何が原因でtextが表示されず、どのようにすれば解決できるのでしょうか。
tweetXXX.js
js
1import React, {useEffect, useState} from 'react'; 2import { useHttpClient } from '../../shared/hooks/http-hook'; 3 4const Tweets = () => { 5 const [loadedtweets, setLoadedtweets] = useState(); 6 const { isLoading, error, sendRequest, clearError } = useHttpClient(); 7 8 9 useEffect(()=>{ 10 const fetchTweets = async () => { 11 const responseData = await sendRequest( 12 `http://localhost:5000/twitter/mytweet` 13 ); 14 setLoadedtweets(responseData.tweets); 15 }; 16 fetchTweets(); 17 }, [sendRequest]); 18 19 20 return( 21 <div> 22 {loadedtweets.map(({text})=>({text}))} 23 </div> 24 ); 25}; 26 27export default Tweets;
http-hook.js
js
1import { useState, useCallback, useRef, useEffect } from 'react'; 2 3export const useHttpClient = () => { 4 const [isLoading, setIsLoading] = useState(false); 5 const [error, setError] = useState(); 6 7 const activeHttpRequests = useRef([]); 8 9 const sendRequest = useCallback( 10 async (url, method = 'GET', body = null, headers = {}) => { 11 setIsLoading(true); 12 const httpAbortCtrl = new AbortController(); 13 activeHttpRequests.current.push(httpAbortCtrl); 14 15 try { 16 const response = await fetch(url, { 17 method, 18 body, 19 headers, 20 signal: httpAbortCtrl.signal 21 }); 22 23 const responseData = await response.json(); 24 25 activeHttpRequests.current = activeHttpRequests.current.filter( 26 reqCtrl => reqCtrl !== httpAbortCtrl 27 ); 28 29 if (!response.ok) { 30 throw new Error(responseData.message); 31 } 32 33 setIsLoading(false); 34 return responseData; 35 } catch (err) { 36 setError(err.message); 37 setIsLoading(false); 38 throw err; 39 } 40 }, 41 [] 42 ); 43 44 const clearError = () => { 45 setError(null); 46 }; 47 48 useEffect(() => { 49 return () => { 50 // eslint-disable-next-line react-hooks/exhaustive-deps 51 activeHttpRequests.current.forEach(abortCtrl => abortCtrl.abort()); 52 }; 53 }, []); 54 55 return { isLoading, error, sendRequest, clearError }; 56}; 57
なお、http://localhost:5000/twitter/mytweetにアクセス(バックエンド)して得られるjsonは、以下の形式です。
ここまでは動作しているので、react側の問題だと考えています。
json
1[ 2 { 3 "text": "試しにXXXスニーカー履いたらベストサイズだった。ワンちゃんしかない。" 4 }, 5 { 6 "text": "今年も無事入院コースでした最近毎年XXX" 7 }, 8 (中略) 9]
以上になります。
足りない情報ありましたらご連絡ください。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/01 12:07 編集