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