0

I have an array of data that I'm iterating through, In the javascript map() function call I'm using the second argument that map() takes, 'index'. How would I pass index to the onClick event? I tried adding index to the list of arguments for onClick but all I can access are the events. Is there anyway I can pass the index through?

I'd like to be able to execute the commented out line 'handleImageClick(productObjects[index])'. I need to let the parent component know which productObject was clicked on by the user.

export default function SideProducts(props) { const { productObjects, handleImageClick } = props; const onClick = (e) => { e.persist() console.log(e) //handleImageClick(productObjects[index]) } console.log(productObjects) return ( <Wrapper> {productObjects.map((productObject,index) => ( <ImageWrapper key={index} src={productObject.image} onClick={(e) => onClick(e)}> </ImageWrapper> ))} </Wrapper> ) } 

5 Answers 5

3

I am doing this without testing, but you should be able to just pass the index like this.

const onClick = (e, index) => { e.persist() console.log(e) //handleImageClick(productObjects[index]) } console.log(productObjects) return ( <Wrapper> {productObjects.map((productObject,index) => ( <ImageWrapper key={index} src={productObject.image} onClick={(e) => onClick(e, index)}> </ImageWrapper> ))} </Wrapper> ) } 
Sign up to request clarification or add additional context in comments.

Comments

2

This way. please go through this blog to learn more about passing arguments with onClick

export default function SideProducts(props) { const { productObjects, handleImageClick } = props; const onClick = (e, index) => { e.persist() console.log(e, index) //handleImageClick(productObjects[index]) } console.log(productObjects) return ( <Wrapper> {productObjects.map((productObject,index) => ( <ImageWrapper key={index} src={productObject.image} onClick={(e) => onClick(e, index)}> </ImageWrapper> ))} </Wrapper> ) } 

Comments

1
  1. First you need to pass the index as argument. onClick={(e) => onClick(e, index)}

  2. Then receive that index as functional parameter.

const onClick = (e, index) => { e.persist() console.log(e, index) //handleImageClick(productObjects[index]) } 

Comments

0

Just add it as a parameter to yow onClick

 <ImageWrapper key={index} src={productObject.image} onClick={(e) => onClick(e,productObject.addThePropHere)}> </ImageWrapper> 

Then in your function just add it as well

const onClick = (e,prop)=> ….code

Comments

0

You can use a higher-order function here to pass params as you want:

const handleWithIndex= index => { return (event) => { e.persist() //handleImageClick(productObjects[index]) } } return ( <Wrapper> {productObjects.map((productObject,index) => ( <ImageWrapper key={index} src={productObject.image} onClick={handleWithIndex(index)}> </ImageWrapper> ))} </Wrapper> ) } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.