javascript - ReactJS:setTimeout 无法在 map 内工作来渲染组件

标签 javascript reactjs dictionary settimeout

我想在一段时间后渲染我的 ChatBubble 组件。 但它不会返回我的组件。 相反,它以字符串形式返回数字 2 和 3。

const Conversation = ({data}) => {
  const { messages } = data;

  return (
    <div>
      {
        messages.map(data => {
          return setTimeout(() => {
            return <ChatBubble key={uniqid()} data={data}/>
          }, data.delay);
        })
      }
    </div>
  );
}

export default Conversation;

最佳答案

原因 setTimeout 返回计时器的 id。你不能只是返回一些东西来使用react并期望一些魔法发生。相反,您可能需要像这样的有状态组件:

class Conversation extends React.Component {
  constructor(props) {
    super(props);
    this.state = { messages: [] };
  }

  render() {
    return this.state.messages.map(data => (<ChatBubble {...data} />));
  }

  componentDidMount() {
     const {messages, delay} = this.props.data;
     this.interval = setInterval(() => {
       this.setState(prev => ({ messages: prev.messages.concat(messages.shift()) }));
       if(!messages.length) clearInterval(this.interval);
     }, delay);
  }

  componentWillUnmount() {
    clearInterval(this.interval);
  }
}

关于javascript - ReactJS:setTimeout 无法在 map 内工作来渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50746643/

相关文章:

javascript - 单击按钮时应用替换功能后,如何显示(不是通过警报,而是在文本区域本身)文本区域的值?

javascript - 固定页脚和相对 DIV

javascript - list.map 不是函数 help create-react-app

css - 如何在 Drawer - Material UI 中将 MenuItem 设置为事件状态?

python - 在 Python 中检查键是否存在并同时获取值?

python - 如何根据值合并两个字典列表

javascript - 获取元素ID并显示在页面上

javascript - 动态雷达图跟踪点

javascript - 如何限制我的 React 组件的大小并添加滚动?

python - OrderedDict 的设置、获取和 popitem 性能