Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

248
Visualizações
Deslizador personalizado en reaccionar, deslizando imágenes que afectan a todas las imágenes del producto cuando se presiona el siguiente botón de flecha

Creé una función para deslizar la imagen del producto seleccionado dentro de la diapositiva con btns de flecha izquierda y derecha. pero cuando se hace clic, se desliza cada imagen del elemento, no solo una. No pude usar la variable newSlideArray fuera de la función. ¿Alguien puede explicarme cómo deslizar la imagen de un solo elemento en la diapositiva?

Aquí está mi código fuente:

 class ViewCart extends Component { constructor(props){ super(props); this.state = { index: 0 } nextSlide =(item)=> { let newSlideArray = []; item.gallery.map(img => newSlideArray.push(img)) if(this.state.index === (newSlideArray.length - 1)){ this.setState({ index: 0 }) }else{ this.setState({ index: this.state.index + 1 }) } } render() { return ( {this.props.cart.map((item, index) => ( <div> <div className={styles.slide}> <div className={styles.leftArrow} onClick={()=> {this.previousSlide(item)}}>&#8592; <div className={styles.rightArrow} onClick={()=> {this.nextSlide(item)}}>&#8594; <img src={item.gallery[this.state.index]} alt="" /> </div> </div> ))} </div> ); } }

[![ingrese la descripción de la imagen aquí][1]][1]

aquí está. Cuando se presiona la flecha derecha, se desliza cada imagen del producto hacia la derecha, no solo una. [1]: https://i.stack.imgur.com/Xw0ME.png

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Tienes que mantener el índice de imágenes para cada item . Estoy usando un estilo funcional por simplicidad.

 const [indexes, setIndexes] = useState({});

Suponiendo que el artículo tiene una id :

 const nextSlide = (item) => { const curIndex = indexes[item.id] || 0; const newIndex = curIndex === item.gallery.length - 1 ? 0 : curIndex + 1; setIndexes({ ...indexes, [item.id]: newIndex }); };

Y entonces:

 <img src={item.gallery[indexes[item.id] || 0]} alt="" />

ejemplo de trabajo

about 4 years ago · Juan Pablo Isaza Relatório

0

El problema con su código es que todas las tarjetas comparten el mismo estado, lo que hace que cuando el estado de una sola tarjeta cambie, todas las demás tarjetas se verán afectadas. intente separarlos haciendo que su estado tenga un índice para cada tarjeta dentro del ViewCart y cuando haga clic en los botones siguiente o anterior, pase a la función el índice de esa tarjeta para actualizar su estado por separado.

Algo como esto:

 class ViewCart extends Component { constructor(props){ super(props); this.state = this.props.cart.map(()=>({index:0})) nextSlide =(item,index)=> { const galleryLen = item.gallery.length if(this.state[index].index === (galleryLen - 1)){ const arr = [...this.state] arr[index] = {index: 0} this.setState(arr) }else{ const arr = [...this.state] arr[index] = {index: this.state[index]+1} this.setState(arr) this.setState(arr) } } render() { return ( {this.props.cart.map((item, i) => ( <div> <div className={styles.slide}> <div className={styles.leftArrow} onClick={()=> {this.previousSlide(item,i)}}>&#8592; <div className={styles.rightArrow} onClick={()=> {this.nextSlide(item,i)}}>&#8594; <img src={item.gallery[this.state[i].index]} alt="" /> </div> </div> ))} </div> ); } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda