現在、ReactでInstagram Graph APIを使用してアプリを構築しています。
■構成
React Hooks + Redux ToolKit + TypeScript + Instagram Graph API
■質問
fetchAsyncGetAccountInfoをdispatchすると、business_discoveryにデータが格納されます。
格納されたデータ(business_discovery['business_discovery']['media']['data'][0]['id'])を引数にfetchAsyncGetMediaInsightをdispatchして、情報を取得したいと考えています。
下記のソースコードのやり方ですと、初期値のidを引数に渡すことになり、fetchAsyncGetAccountInfoで取得したidを取得することができません。
fetchAsyncGetAccountInfoで取得したデータをfetchAsyncGetMediaInsightの引数に渡すやり方はどのようにするのがベストでしょうか?
または別の方法がありますでしょうか?
お力添えよろしくお願い致します。
■ソースコード
Performance.tsx
js
1const Perfomance: React.FC = () => { 2 const dispatch = useDispatch() 3 const business_discovery = useSelector(selectBusinessDiscovery) 4 const media_insights = useSelector(selectMediaInsights) 5 6 useEffect(() => { 7 const f = async () => { 8 await dispatch(fetchAsyncGetAccountInfo()) 9 await dispatch(fetchAsyncGetMediaInsight(business_discovery['business_discovery']['media']['data'][0]['id'])) 10 } 11 f() 12 }, [dispatch]) 13 14 return ( 15 <div> 16 <p>{media_insights['data'][0]['title']}</p> 17 </div> 18 ) 19} 20 21export default Perfomance
inistaSlice.tsx
js
1export const fetchAsyncGetAccountInfo = createAsyncThunk('perfomance/getAccountInfo', async () => { 2 const {data} = await axios.get(`https://graph.facebook.com/v8.0/xxx?fields=business_discovery.username(xxx){media{id}}&access_token=xxx`) 3 return {data: data} 4}) 5 6export const fetchAsyncGetMediaInsight = createAsyncThunk('perfomance/getMediaInsight', async (media_id: string) => { 7 const {data} = await axios.get(`https://graph.facebook.com/v8.0/${media_id}/insights?metric=engagement,impressions,reach,saved&access_token=xxx`) 8 return {data: data} 9}) 10 11const instaSlice = createSlice({ 12 name: 'perfomance', 13 initialState: initialState, 14 reducers: {}, 15 extraReducers: (builder) => { 16 builder.addCase(fetchAsyncGetAccountInfo.fulfilled, (state, action) => { 17 return { 18 ...state, 19 business_discovery: action.payload.data, 20 } 21 }) 22 builder.addCase(fetchAsyncGetMediaInsight.fulfilled, (state, action) => { 23 return { 24 ...state, 25 media_insights: action.payload.data 26 } 27 }) 28 } 29})
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。