在 React 中延迟数组映射迭代

Delay array map iteration in React

我有这个数组,我想对其进行迭代。我需要在下一个之前延迟几秒钟。

{this.props.things.map((thing, index) => {
   return (
     <div key={index}>{thing.content}</div>
     // Delay 1 second here
   )
})}

这个数组的初始状态总是不止一个。出于 UI 目的,我希望它们一个接一个地加载到 DOM。

react的render函数是同步的。 javascript 地图也是同步的。所以在这里使用定时器不是正确的解决方案。

但是,您可以在组件状态下跟踪已呈现的项目并使用 javascript 计时器更新该状态:

有关示例实现,请查看此 fiddle

React.createClass({

  getInitialState() {
    return {
      renderedThings: [],
      itemsRendered: 0
    }
  },

  render() {
    // Render only the items in the renderedThings array
    return (
      <div>{
        this.state.renderedThings.map((thing, index) => (
          <div key={index}>{thing.content}</div>
        ))
      }</div>
    )
  },

  componentDidMount() {
    this.scheduleNextUpdate()
  },

  scheduleNextUpdate() {
    this.timer = setTimeout(this.updateRenderedThings, 1000)
  },

  updateRenderedThings() {
    const itemsRendered = this.state.itemsRendered
    const updatedState = {
      renderedThings: this.state.renderedThings.concat(this.props.things[this.state.itemsRendered]),
      itemsRendered: itemsRendered+1
    }
    this.setState(updatedState)
    if (updatedState.itemsRendered < this.props.things.length) {
      this.scheduleNextUpdate()
    }
  },

  componentWillUnmount() {
    clearTimeout(this.timer)
  }

})