Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

246
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!