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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user