Skip to content

Commit 3b8a859

Browse files
committed
prevent unexpected auto-scroll to top
1 parent dbec639 commit 3b8a859

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

src/pages/News/NewsPage.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useEffect, useMemo } from 'react';
1+
import React, { useState, useEffect, useMemo, useLayoutEffect } from 'react';
22
import ShareModal from '@/components/ShareModal';
33
import { useNavigate, useParams, useLocation } from 'react-router-dom';
44
import { getAllPosts, groupPostsByCategory, Post } from '@/utils/posts-utils';
@@ -49,6 +49,18 @@ const NewsPage: React.FC = () => {
4949
return params.get('q') || '';
5050
});
5151

52+
useLayoutEffect(() => {
53+
if (!isLoading) {
54+
const savedY = Number(sessionStorage.getItem('newsScrollY') || 0);
55+
if (savedY > 0) {
56+
requestAnimationFrame(() => {
57+
window.scrollTo({ top: savedY, behavior: 'auto' });
58+
});
59+
}
60+
sessionStorage.removeItem('newsScrollY');
61+
}
62+
}, [isLoading, activeCategory, searchTerm]);
63+
5264
useEffect(() => {
5365
async function load() {
5466
setIsLoading(true);
@@ -127,7 +139,10 @@ const NewsPage: React.FC = () => {
127139

128140
const hasMore = filteredPosts.length > displayCount;
129141

130-
const handleCategoryClick = (cat: string) => setActiveCategory(cat);
142+
const handleCategoryClick = (cat: string) => {
143+
sessionStorage.setItem('newsScrollY', String(window.scrollY));
144+
setActiveCategory(cat);
145+
};
131146

132147
const handleShowMore = () => {
133148
const total = filteredPosts.length;
@@ -296,6 +311,10 @@ const NewsPage: React.FC = () => {
296311
value={searchTerm}
297312
onChange={(e) => {
298313
const value = e.target.value;
314+
sessionStorage.setItem(
315+
'newsScrollY',
316+
String(window.scrollY),
317+
);
299318
setSearchTerm(value);
300319
const catPath =
301320
activeCategory === 'All'

0 commit comments

Comments
 (0)