refactor: 重构状态管理从 URL 驱动到本地状态

- 移除 getFiltersFromUrl 函数
- 添加 filters 本地状态(初始化时从 URL 读取)
- 重命名 updateUrlParams 为 updateFilters
- updateFilters 不再修改 URL,只更新本地状态
- 更新 loadEvents 使用本地 filters 依赖
- 移除 filterTags 中重复的 filters 声明

简化状态管理逻辑,避免 URL 和状态同步问题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zdl
2025-10-26 14:39:45 +08:00
parent 916537f25b
commit 8db9a9429e

View File

@@ -120,8 +120,8 @@ const Community = () => {
const [selectedEventForStock, setSelectedEventForStock] = useState(null); const [selectedEventForStock, setSelectedEventForStock] = useState(null);
const [lastUpdateTime, setLastUpdateTime] = useState(new Date()); const [lastUpdateTime, setLastUpdateTime] = useState(new Date());
// 从URL获取筛选参数 // 筛选参数状态 - 初始化时从URL读取,之后只用本地状态
const getFiltersFromUrl = useCallback(() => { const [filters, setFilters] = useState(() => {
return { return {
sort: searchParams.get('sort') || 'new', sort: searchParams.get('sort') || 'new',
importance: searchParams.get('importance') || 'all', importance: searchParams.get('importance') || 'all',
@@ -132,27 +132,18 @@ const Community = () => {
industry_code: searchParams.get('industry_code') || '', industry_code: searchParams.get('industry_code') || '',
page: parseInt(searchParams.get('page') || '1', 10) page: parseInt(searchParams.get('page') || '1', 10)
}; };
}, [searchParams]); });
// 更新URL参数 // 更新筛选参数 - 不再修改URL
const updateUrlParams = useCallback((params) => { const updateFilters = useCallback((newFilters) => {
const newParams = new URLSearchParams(searchParams); setFilters(prev => ({ ...prev, ...newFilters }));
Object.entries(params).forEach(([key, value]) => { }, []);
if (value) {
newParams.set(key, value);
} else {
newParams.delete(key);
}
});
setSearchParams(newParams);
}, [searchParams, setSearchParams]);
// 加载事件列表 // 加载事件列表
const loadEvents = useCallback(async (page = 1) => { const loadEvents = useCallback(async (page = 1) => {
logger.debug('Community', 'loadEvents 被调用', { page }); logger.debug('Community', 'loadEvents 被调用', { page });
setLoading(true); setLoading(true);
try { try {
const filters = getFiltersFromUrl();
const response = await eventService.getEvents({ const response = await eventService.getEvents({
...filters, ...filters,
page, page,
@@ -169,15 +160,14 @@ const Community = () => {
setLastUpdateTime(new Date()); setLastUpdateTime(new Date());
} }
} catch (error) { } catch (error) {
// ❌ 移除 toast仅 console 输出
logger.error('Community', 'loadEvents', error, { logger.error('Community', 'loadEvents', error, {
page, page,
filters: getFiltersFromUrl() filters
}); });
} finally { } finally {
setLoading(false); setLoading(false);
} }
}, [getFiltersFromUrl, pagination.pageSize]); // ✅ 移除 toast 依赖 }, [filters, pagination.pageSize]);
// 处理筛选变化 // 处理筛选变化
const handleFilterChange = useCallback((filterType, value) => { const handleFilterChange = useCallback((filterType, value) => {
@@ -228,7 +218,6 @@ const Community = () => {
}; };
// 获取筛选标签 // 获取筛选标签
const filters = getFiltersFromUrl();
const filterTags = Object.entries(filters) const filterTags = Object.entries(filters)
.filter(([key, value]) => { .filter(([key, value]) => {
if (key === 'industry_code') return !!value; if (key === 'industry_code') return !!value;