ReactJS: setTimeout не работает внутри карты для визуализации компонента - PullRequest
0 голосов
/ 07 июня 2018

Я хочу визуализировать мой компонент 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;

1 Ответ

0 голосов
/ 07 июня 2018

Причина setTimeout возвращает id таймера.Вы не можете просто вернуть что-то, чтобы среагировать и ожидать, что случится какое-то волшебствоВместо этого вам, вероятно, нужен такой компонент:

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