延迟 React 中的数组映射迭代



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

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

此数组的初始状态始终不止一个。出于UI目的,我希望它们在DOM中一个接一个地加载。

react 的

渲染函数是同步的。JavaScript 映射也是同步的。因此,使用计时器不是正确的解决方案。

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

有关示例实现,请查看此小提琴:

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)
  }
})

最新更新