質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

387閲覧

スクロールの一番下にいくとAPIコールを行いたい

2_34_koki

総合スコア67

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/09/21 05:13

やりたいこと

ユーザが一番下までスクロールしたときにAPIコールを行い,記事を追加する

できないこと

1回目までの1番下までスクロールはAPIコールされるが記事が追加されてその位置から再度追加分のスクロールを行い一番下で
スクロールするとAPIコールされない.コードでいうとhookからもらっているbottomが更新されない.

ご教授よろしくお願いします.

コード

import React, { useState } from "react"; import useFetch from "use-http"; import Box from "@material-ui/core/Box"; import Spiner from "@material-ui/core/CircularProgress"; import LazyLoad from "react-lazyload"; import { FadeModal } from "../components/MaterialModal"; import "react-awesome-slider/dist/styles.css"; import AwesomeSlider from "react-awesome-slider"; import "react-awesome-slider/dist/styles.css"; import style from "../styles/react-awesome-slider.module.css"; import { useScrollBottom } from "../hooks/useScrollBottom"; type Image = { id: string; url: string; width: number; height: number; title: string; description: string; author: string; color: string; postDatetime: number; location: { lat: number; lng: number; }; }; export const Photos = () => { const [state, setState] = useState<Image[]>([]); const { get, loading } = useFetch<Image[]>( "https://hoge-hoge/article" ); const bottom = useScrollBottom(); React.useEffect(() => { const f = async () => { const images = await get("/article?per=10"); const { data, ok } = images; if (ok) { setState([...state, ...data.images]); } }; f(); }, [get, bottom]); return ( <> <Box style={{ maxWidth: "1300px", margin: "auto" }} className="albums" onScroll={() => console.log("alkjsfd")} > {state.map((v, i) => ( <LazyLoad height={600} key={i}> <img src={v.url} /> </LazyLoad> ))} </Box> {loading || bottom && ( <Spiner color="primary" /> )} </> ); };
import { useState, useEffect } from "react"; export const useScrollBottom = () => { const [bottom, setBottom] = useState(false); window.onscroll = function () { if (window.innerHeight + window.scrollY === document.body.offsetHeight) { setBottom(true); } }; return bottom; };

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問