Обновление модального компонента после отправки комментария - PullRequest
0 голосов
/ 05 сентября 2018

Я использую комбо из React Big Calendar и Resal-Strap Modal . Когда пользователь нажимает на событие даты в календаре, открывается модальное окно с формой комментария.


Выпуск

Моя проблема в том, что когда я публикую комментарий при отправке, календарь в фоновом режиме перезагружается с новым событием даты с новым комментарием ПЛЮС с исходным событием даты , поэтому у меня есть два события даты один без новых комментариев, а другой с новым комментарием, который я только что опубликовал.


Ожидаемый результат

Лента комментариев внутри модального окна должна обновляться новым комментарием, а не компонентом календаря.


Я вставил код моего редуктора и действий ниже. Должен ли я работать над редуктором, как большинство вопросов, которые я читал, или обновлять компонент MODAL или созданный мной commentFeedComment - это форма.

Я намеренно пропустил свой код импорта и функции handleChange или Submit, поскольку они не являются проблемой, это переменная comment , в которой хранятся данные содержимого, которые получают только из redux


когда пользователь нажимает на событие даты в календаре, заполняющее модальное время. Теперь, когда используются комментарии, переменная комментария не обновляется, так как пользователь не нажал на событие даты

Редуктор

case CREATE_COMMENT:
  return {
    ...state,
    content: [action.payload, ...state.content],
    loading: false
  };

Действия

export const addComment = (id, commentData) => dispatch => {
  dispatch(clearErrors());
  axios
    .post(`/api/calendar/id/${id}/comment`, commentData)
    .then(res =>
      dispatch({
        type: CREATE_COMMENT,
        payload: res.data
      })
    )
    .catch(err =>
      dispatch({
        type: GET_ERRORS,
        payload: err.response.data
      })
    );
};

Компонент календаря

class Calendar extends Component {
  constructor(props) {
    super(props);

    this.state = {
      modal: false,
      commentData: [],
      title: '',
      contentCopy: '',
      start: null,
      _id: ''
    };
    this.toggle = this.toggle.bind(this);
  }

  componentDidMount() {
    this.props.getAllContent();
  }

  toggle = e => {
    this.setState({
      modal: !this.state.modal,
      _id: e._id,
      title: e.title,
      contentCopy: e.contentCopy,
      start: e.start,
      commentData: e.commentData
    });
  };

  render() {
    const { content, loading } = this.props.content;
    let commentsVariable;
    let PostDate = [];

    if (content == null || loading) {
      PostDate = [];
    } else {
      if (content.length > 0) {
        PostDate = content.map(x => ({
          start: x.dateGoingLive,
          end: x.dateGoingLive,
          title: x.clientName,
          contentCopy: x.contentCopy,
          _id: x._id,
          commentData: x.comments
        }));
      } else {
        PostDate = [];
      }
    }


    if (this.state.commentData == null || this.state.commentData == undefined) {
      commentsVariable = this.state.commentData;
    } else {
      commentsVariable = this.state.commentData.map( x => (
          <div className="mb-3" key={x._id}>
              <p>{x.comment}</p>
          </div>
        )

    return (
      <div className="Calendar col-sm-10 offset-sm-1">
        <Calendar
          selectable
          defaultDate={new Date(dateString)} 
          views={['month']}
          defaultView="month"
          events={PostDate} // Feed in Redux Props
          style={{
            height: '85vh'
          }}
          onSelectEvent={event => this.toggle(event)} 
        />

        <Modal
          isOpen={this.state.modal}
          toggle={this.toggle}
          className='modal-comment-click'
          size="lg"
        >
          <ModalHeader toggle={this.toggle}>
            Date Going Live: {moment(this.state.start).format('ddd MMM Do')}
          </ModalHeader>
          <ModalBody className="row">
            <div className={!this.state.commentOpen ? 'col-sm-12' : 'col-md-6'}>
            </div>
            <div
              className='commentSection col-md-6 animated fadeInUp'
            >
              <div className="commentFeed">{commentsVariable}</div>
              <CommentForm social_id={this.state._id} />
            </div>
          </ModalBody>
        </Modal>
      </div>
    );
  }
}

ContentCalendar.propTypes = {
  getAllContent: PropTypes.func.isRequired, 
  content: PropTypes.object.isRequired,
};

const mapStateToProps = state => ({
  content: state.content,
  auth: state.auth,
});

export default connect(
  mapStateToProps,
  {
    getAllContent,
  }
)(Calendar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...