【发布时间】:2021-10-15 11:15:02
【问题描述】:
我试图在每次调用 handleScroll() 时将 React 状态 setMoviesPage 的值增加 1。
我面临的问题是状态 setMoviesPage 仅更新组件重新呈现(通过导航到不同的 url 并返回)。
这是我的代码:
const [moviesPage, setMoviesPage] = useState(1);
async function handleScroll() {
if (window.innerHeight + document.documentElement.scrollTop !== document.documentElement.offsetHeight) return;
await setIsFetching(true);
setMoviesPage(moviesPage + 1);
}
useEffect(() => {
if (!isFetching) return;
fetchMovies(String(moviesPage))
.then(prevState => updateMovies([...prevState]))
.catch(() => updateMovies([]));
setIsFetching(false);
}, [isFetching, setIsFetching, moviesPage, updateMovies]);
如何解决?谢谢
【问题讨论】:
-
是调用
setMoviesPage()自动触发重新渲染的问题吧? -
await setIsFetching(true);在做什么?isFetching是其他 React 状态吗?如果是这样,React 状态更新是异步处理的,你不能等待它们。 -
@sungryeol 反过来,
moviesPage值仅在重新渲染组件时才会增加(通过导航到不同的 url 并返回) -
@DrewReese 是的,
isFetching是调用 useEffect() 所需的另一个状态(根据我的代码 sn-p),因为isFetching是 useEffect() 的依赖项。如果我可以等到setMoviesPage或isFetching被处理,我如何每次到达页面底部时增加moviesPage的值(我想实现无限滚动) -
那么你是否只需要在获取完成时将
moviesPage加一?或者,当然....有一个事件处理程序,当页面底部被点击时,moviesPage的值会增加一个?
标签: javascript reactjs typescript react-hooks state