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