¿Cómo puedo afectar el estado de un elemento dentro de una lista? Actualmente, onClick está aplicando la clase "seleccionada" a todos los elementos de la lista.
JSX
import React, { useState } from 'react'
export default () => {
const [showPhoto, setShowPhoto] = useState(false)
return (
<ul>
{photos.map(photo => (
<li className={showPhoto ? 'selected' : ''} onClick={() => setShowPhoto(!showPhoto)}>
<img />
</li>
))}
</ul>
)
}
SASS
li
...
img
...
&.selected
...
img
...
1
Ryan Prentiss
14 dic. 2019 a las 11:12
2 respuestas
Lo que haría crear reactNode separado para su elemento de lista y colocarlo en hacer clic allí. porque ahora solo está agregando clase en cada elemento de la matriz.
const ParentNode=()=>(
<ul/>
{arrayOfSomething.map((something,idx)=>
<key={something+idx}childNode/>
)}
</ul>)
//then
const ChildNode =()=>{
const[isShow, setIsShow]=useState(false)
return(
<li onClick={()=>setIsShow(!isShow)}>
{isShow?something : something else}
</li>
)
}
0
Andris Laduzans
22 dic. 2019 a las 18:34
Para resolver el problema, necesitaba aplicar una 'clave' condicional a className
y asignar el valor 'clave' a la variable showPhoto
a través del oyente onClick
de la siguiente manera ...
<ul>
{photos.map(photo => (
<li
className={showPhoto === photo.id ? style.show : ''}
onClick={() => setShowPhoto(showPhoto === false ? photo.id : false)}
>
<img />
</li>
))}
</ul>
0
Ryan Prentiss
14 dic. 2019 a las 10:24
Preguntas relacionadas
Nuevas preguntas
reactjs
React es una biblioteca de JavaScript para crear interfaces de usuario. Utiliza un paradigma declarativo basado en componentes y tiene como objetivo ser eficiente y flexible.