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

React父组件传递card Prop后子组件无法访问问题求助

React子组件Prop已声明但未被读取的问题

我在React项目中从父组件App向子组件Card传递了card等Prop,但子组件解构card后,IDE提示该Prop已声明但未被读取,截图中card变灰也说明它未被使用,无法正常访问。

父组件代码

import {useState } from 'react';

// importing styles
import './styles/Card.css'

// importing components
import Card from './components/Card'

const images = [
  {"src": "/img/clock.jpg"},
  {"src": "/img/dome.jpg"},
  {"src": "/img/fcse.jpg"},
  {"src": "/img/gate.jpg"},
  {"src": "/img/lib.jpg"},
  {"src": "/img/tuck.jpg"},
]

function App() {
const [card, setCard ] = useState([])
const[turn, setTurn ] = useState(0)
const [choiceOne, setChoiceOne] = useState(null)
const [choiceTwo, setChoiceTwo ] = useState(null)

  const shuffle = () =>{
    const shuffledCards = [...images, ...images]
      .sort(()=>{
        return (Math.random() - 0.5)
      })
      .map((card ) => ({...card, id: Math.random()}))

      setCard(shuffledCards)
      setTurn(0)
  }

  console.log(card, turn)

  const handleChoice = (card)=>{
    console.log(card)
  }

  return (
    <div className="App">
      {/* navbar */}
      <div className="nav">
          <h1 className="title">Memory Game!</h1>
          <button className="btn" onClick={shuffle}>Reset Game</button>
      </div>

      {/* card grid */}
      <div className="card-grid">
        {card.map((card)=>{
            return(
                  <Card
                    handleChoice = {handleChoice}
                    card={card}
                    key={card.id}
                    source = {card.src}
                    cover = "../img/logo.png"
                  />
            )
        })}
      </div>
    </div>
  );
}

export default App;

子组件代码

import '../styles/Card.css'

const Card = ({source, card, cover, handleChoice}) => {
    
    const handleClick = ( card ) => {
        handleChoice(card)
    }

    return ( 
        <div className="card">
                <img className='front' src={source}/>
                <img className='back' onClick={handleClick} src={cover}/>
        </div>
     );
}

export default Card;

问题截图

子组件截图

问题原因

子组件的handleClick函数定义了同名局部参数card,这个局部变量覆盖了从Props解构得到的card,导致解构的card完全没被使用,所以IDE提示未读取。

解决方案

去掉handleClick的参数,直接使用Props中的card:

import '../styles/Card.css'

const Card = ({source, card, cover, handleChoice}) => {
    
    const handleClick = () => {
        handleChoice(card)
    }

    return ( 
        <div className="card">
                <img className='front' src={source}/>
                <img className='back' onClick={handleClick} src={cover}/>
        </div>
     );
}

export default Card;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:38:13