Бесчисленные http запросы, созданные в приложении стека MERN - PullRequest
0 голосов
/ 06 июня 2018

Я не знаю, что вызывает это, он отправляет новый запрос почти каждые полсекунды.Я думал, что это потому, что я вызываю свое действие в методе рендеринга, но это не так, пытался вызвать его в componentDidMount, тот же результат.

Вот код:

Действие:

    export const getComments = () => dispatch => {
  dispatch({ 
    type: GET_COMMENTS
  })
  fetch(`${API_URL}/comments`,
  { method: 'GET', headers: {
      'content-type': 'application/json'
    }})
    .then((res) => res.json())
    .then((data) => dispatch({
      type: GET_COMMENTS_SUCCESS,
      payload: data
    }))
    .catch((err) => dispatch({
      type: GET_COMMENTS_FAILED,
      payload: err
    }))
}

Поскольку мне нужно загрузить идентификатор записи перед вызовом действия комментария, я поместил его в метод рендеринга:

 componentDidMount() {
    const { match: { params }, post} = this.props
      this.props.getPost(params.id);
  }


  render() {
    const { post, comments } = this.props;
    {post && this.props.getComments()}
    return <div>
     ...

Вот маршрут:

router.get("/comments", (req, res) => {
  Comment.find({})
    .populate("author")
    .exec((err, comments) => {
      if (err) throw err;
      else {
        res.json(comments);
      }
    });
});

Ответы [ 2 ]

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

getComments() вызывает запрос http, поэтому его следует переместить в componentDidMount hoook жизненного цикла.Это должно работать:

componentDidMount() {
    const { match: { params } = this.props
      this.props.getPost(params.id);
      this.props.getComments()
  }


  render() {
    const { post, comments } = this.props;
    {post && comments}
    return <div>
     ...

Когда компонент смонтирован, параметры извлекаются из props.match и извлекаются сообщение и комментарии.Затем с помощью избыточности отправляются данные постов и комментариев, и к ним можно получить доступ методом render подключенного компонента.

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

Ваша функция getComments () работает во время рендеринга.Диспетчеризация, используемая в действии, вызывает повторную визуализацию, вызывая повторный запуск getComments (), создавая бесконечный цикл.

Вместо того, чтобы извлекать комментарии в функции render (), вы должны вместо этого извлечь их вХук жизненного цикла componentDidMount, затем в функции рендера просто отображать комментарии из реквизита;

...