Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

A prop is not accessible inside the child component even after passing it in the parent component

I am passing a prop from the parent component, but inside the child component, the prop is not accessible. Please see the return statement of the parent component where I have passed the card as a prop.

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;

The Child Component:

Inside the child component, I am trying to access the card prop but it says that the card (the prop) is declared but its value is never read.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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;

Screenshot:

Screenshot of the child component

I destructured the prop inside the child component, but its still not accessible. In the screenshot, one can see that the card is greyed out which indicates that it has not been used.

>Solution :

I’m guessing you are refering to Line:7 in the screenshot where you have used card which you expect to be populated with the destructed card value. You have defined card variable in Line6 as function param, hence that variable will be picked up instead of props. Changing function param of handleClick to a different variable such as event should do the trick.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading