<p>Hey Jake, thanks for your help. I just want to give an update, and sorry for the long delay (I took a few days off).</p> So, I found the problem. It wasn't the method renderSlides() that's the issue, it was actually due to the fact that state = { slideContents: [] } was empty to begin with. I used componentDidMount() to populate this.state.slideContents and it works as intended now. See below<br /> import _ from 'lodash' import React, { Component } from 'react' import './Carousel.css' class carousel extends Component { state = { slideContents: [], slideIndex: 0 } componentDidMount() { this .setState({slideContents: [ 'content 1' , 'content 2' , 'content 3' ]}) } onNextSlide = () => { const c = ` ${ Date .now()} ` this .setState({ slideIndex: this .state.slideIndex + 1 }) this .setState({ slideContents: [ ... this .state.slideContents, c ]}); } onPreviousSlide(slide) { this .setState({ slideContents: _.without( this .state.slideContents, slide) }); } renderSlides() { const slides = this .state.slideContents.map( (item, index) => { return ( <li key={item} className= "animated fadeIn" >{ item }</li> ) }) const i = this .state.slideIndex return slides[i] } // renderSlides() { // return <li key={ slides[ this .state.slideIndex] } className= "animated fadeIn" >{ slides[ this .state.slideIndex] }</li> // } render() { return ( <div> <h1>carousel works!</h1> <button onClick={ this .onNextSlide}>next</button> <ul>{ this .renderSlides()}</ul> </div> ) } } export default carousel Lesson learned: taking a break after coding for many hours per day is more productive than not having breaks at all :)