You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React:如何在useEffect中访问并修改另一状态变量?

解决方案

1. 保存原始年份范围

首先添加一个状态存储API返回的完整年份区间,避免后续过滤后丢失原始数据:

const [originalYearsRange, setOriginalYearsRange] = useState<{ dateFrom: number | null; dateTo: number | null }>({ 
    dateFrom: 1900, 
    dateTo: new Date().getFullYear() 
});

2. 更新数据获取逻辑

修改获取API数据的useEffect,把返回的年份范围存入新状态:

useEffect(() => {
    async function fetchData() {
        let yearsResult = await SearchFilterAPI.getYearsForSelections(makeId, rangeId, modelId);
        // 保存原始年份区间
        setOriginalYearsRange({
            dateFrom: yearsResult.dateFrom,
            dateTo: yearsResult.dateTo
        });
        
        let fromResults: Array<ISelectOption> = [];
        let toResults: Array<ISelectOption> = [];
        populateFromYearsResults(yearsResult.dateFrom, yearsResult.dateTo, fromResults);
        populateToYearsResults(yearsResult.dateTo, yearsResult.dateFrom, toResults);

        setFromOptions([...fromResults])
        setToOptions([...toResults])
    }
    fetchData();
}, [makeId, rangeId, modelId]);

3. 监听选中起始年份,更新结束年份选项

添加专门的useEffect监听selectedFromYear变化,重新生成符合要求的结束年份选项:

useEffect(() => {
    // 处理起始年份为null的情况,默认用1900
    const currentFromYear = selectedFromYear ?? 1900;
    const toResults: Array<ISelectOption> = [];
    // 基于原始结束年份和当前选中的起始年份,重新生成结束年份选项
    populateToYearsResults(originalYearsRange.dateTo, currentFromYear, toResults);
    setToOptions([...toResults]);
    
    // 若当前选中的结束年份小于新的起始年份,自动重置结束年份
    if (selectedToYear && selectedToYear < currentFromYear) {
        setSelectedToYear(currentFromYear);
        handleToChanged(currentFromYear);
    }
}, [selectedFromYear, originalYearsRange, selectedToYear, handleToChanged]);

逻辑说明

  • 保存原始年份区间是为了每次更新结束年份选项时,都能基于完整的年份范围重新生成,不会因为多次过滤导致数据缺失。
  • 监听起始年份变化时,调用populateToYearsResults生成新的结束年份列表,自动移除所有早于选中起始年份的选项。
  • 额外处理了结束年份选中值不符合新范围的情况,避免用户选中无效年份。

内容的提问来源于stack exchange,提问作者CheGuevarasBeret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:25:25