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

React中state数据作为props传子组件行为异常问题排查

问题分析与解决

问题1:输入框输入时控制台打印undefined/旧搜索结果

输入框输入内容时,每次按键都会触发onChange调用setSearch更新search状态,导致SearchBar组件重新渲染。但animeList只有提交表单调用animeSearch时才会更新,所以此时AnimeCard接收到的要么是初始的undefined(未执行过搜索),要么是上一次的搜索结果,自然会打印这些内容。

问题2:提交搜索时打印两次结果数组

这是React**开发环境下严格模式(Strict Mode)**的特性:为了检测潜在问题,严格模式会在开发阶段重复调用组件渲染函数,导致console.log(animeList)执行两次。生产环境下该重复行为会自动消失。


针对性解决方案

1. 避免输入时的无效打印

在AnimeCard中,仅在animeList更新且有值时打印,用useEffect监听状态变化实现:

import { useEffect } from 'react'

const AnimeCard = ({animeList}) => {
  useEffect(() => {
    if (animeList) {
      console.log(animeList)
    }
  }, [animeList]) // 仅当animeList变化时触发
}

export default AnimeCard

2. 消除开发环境下的重复打印

上面的useEffect方案已经能解决——严格模式下重复渲染时,若animeList未变化,useEffect不会重复执行。若要彻底避免严格模式的影响,可暂时移除项目根组件外包裹的<React.StrictMode>标签,但不推荐长期这么做,严格模式能帮你提前发现潜在问题。

额外优化:初始状态赋值

给animeList设置初始空数组,减少空值判断的麻烦:

const [animeList, setAnimeList] = useState([])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:06:50