父组件异步更新的raceName状态无法传递给子组件的排查问询
raceName未正确作为props传递
检查父组件渲染FleetsTables时,是否确实将raceName作为props传入,比如是否漏写<FleetsTables tableData={tableData} raceName={raceName} />,或者存在拼写错误(如把raceName写成raceNamee)。raceName状态更新方式错误
Preact依赖useState的setter函数(函数组件)或setState(类组件)触发重渲染。如果直接修改状态变量(如raceName = 'newValue')而非调用setter,父组件不会重渲染,子组件自然无法获取新值。异步更新存在闭包陷阱
若在异步回调(如API请求、setTimeout)中更新raceName,回调可能捕获了旧的状态闭包,导致更新未同步。需使用函数式更新确保基于最新状态修改:// 正确示例:函数式更新避免闭包问题 setTimeout(() => { setRaceName(prev => 'newRaceName'); }, 1000);子组件缓存逻辑遗漏raceName依赖
如果子组件使用useMemo、useCallback等缓存API,但未将raceName加入依赖数组,会导致缓存结果不更新。比如:// 错误示例:依赖数组缺少raceName const processedData = useMemo(() => { return handleData(tableData, raceName); }, [tableData]); // 正确:添加raceName到依赖 const processedData = useMemo(() => { return handleData(tableData, raceName); }, [tableData, raceName]);父组件中raceName被意外重置
排查父组件是否有其他逻辑在更新raceName后,又将其重置为旧值(比如另一个异步操作错误修改状态),导致控制台打印出新值但实际状态被覆盖。子组件对raceName的使用存在局部变量缓存
若子组件将raceName赋值给局部变量后一直使用该变量,而非直接读取props,会无法响应props更新:// 错误示例:局部变量不会随props更新 function FleetsTables({ tableData, raceName }) { let localRace = raceName; // 后续使用localRace,无法获取最新props值 }应直接使用解构后的
raceName或props.raceName,确保每次渲染读取最新值。
内容的提问来源于stack exchange,提问作者schmell

