При смене реквизита на приставку влияют все компоненты - PullRequest
0 голосов
/ 15 сентября 2018

Когда я монтирую свой компонент CommentFeed, он будет вызывать getPost() дважды, потому что у меня есть два поста с отдельным CommentFeeds.Поскольку каждое из этих полей прослушивает изменения реквизита для комментариев, последний CommentFeed (Пост 2) не имеет никаких комментариев и приведет к тому, что мой (Пост 1) не будет иметь комментариев.Я думал о сохранении состояний комментариев для каждого CommentFeed, но если я проверяю prevState с nextProps, теоретически все равно следует переопределять комментарии Post1, поскольку технически nextProp отличается?

Как мне вообще подойти к этому?Пожалуйста, скажите мне, если это не имеет смысла, поэтому я могу уточнить лучше

Пост 1: есть Комментарии

Пост 2: Нет комментариев (getPost () этого CommentFeed удаляетКомментарийПочта сообщения 1)

import React, { Component } from "react";
import PropTypes from "prop-types";
import CommentItem from "./CommentItem";
import { getPost } from "../../oldComp/actions/postActions";
import { connect } from "react-redux";
class CommentFeed extends Component {
  constructor(props) {
    super(props);
    const { postId } = this.props;
    this.props.getPost(postId);
  }

  render() {
    const { postId, comments } = this.props;
    console.log(comments);
    if (comments === undefined) {
      return <div />;
    } else {
      return (
        <div>
          {postId}
          {comments.map(comment => {
            return (
              <div key={comment._id}>
                <CommentItem
                  key={comment._id}
                  postId={postId}
                  comment={comment}
                />
              </div>
            );
          })}
        </div>
      );
    }
  }
}

CommentFeed.propTypes = {
  comments: PropTypes.array,
  getPost: PropTypes.func.isRequired,
  comments: PropTypes.array,
  postId: PropTypes.string.isRequired
};
const mapStateToProps = state => ({
  comments: state.post.post.comments
});
export default connect(
  mapStateToProps,
  { getPost }
)(CommentFeed);

Post 1 comments

Post 2 comments

1 Ответ

0 голосов
/ 16 сентября 2018

Я полагаю, если вы добавите getPost () в componentDidMount, он будет вызван только один раз.Этот метод вызывается один раз, когда компонент сначала монтируется, но не вызывается при повторном рендеринге.Асинхронные действия по извлечению обычно входят в этот жизненный цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...