Диспетчерский вызов не go создателю действия updatePost, но сообщение обновлено - PullRequest
0 голосов
/ 05 апреля 2020

Я попытался обновить сообщение, отправив форму редактирования, и на handleSubmit я отправил создателю действия updatePost, но, оказывается, он даже не go создателю действия. Прямо идет к контроллеру. Мне интересно, почему это происходит, и мне даже нужно здесь действие updatePost? Кроме того, он не перенаправляет после отправки формы на маршрут /profile/:username/posts.

Вот код ниже.

handleSubmit = () => {
  const id = this.props.match.params.id
  const username = this.props.auth.user.username
  const postData = {
    title: this.state.title,
    description: this.state.description,
  }
  this.props.dispatch(updatePost(id, postData), () => {
    this.props.history.push(`/profile/${username}/posts`)
  })
}


---

export const updatePost = (id, postData, redirect) => {
  return async (dispatch) => {
    dispatch({ type: "UPDATING_POST_START" })
    try {
      const res = await axios.put(
        `http://localhost:3000/api/v1/posts/${id}/edit`,
        postData
      )
      dispatch({
        type: "UPDATING_POST_START",
        data: res.data,
      })
      redirect()
    } catch (error) {
      dispatch({
        type: "UPDATING_POST_FAILURE",
        data: { error: "Something went wrong" },
      })
    }
  }
}

---

editPost: async (req, res, next) => {
  try {
    const postData = {
      title: req.body.title,
      description: req.body.description,
    }
    const post = await Post.findByIdAndUpdate(req.params.id, postData, {
      new: true,
    })
    if (!post) {
      return res.status(404).json({ message: "No post found " })
    }
    return res.status(200).json({ post })
  } catch (error) {
    return next(error)
  }
}

1 Ответ

0 голосов
/ 07 апреля 2020

handleSubmit ничего не знает о dispatch. Попробуйте отправить updatePost следующим образом:

handleSubmit = () => {
  return dispatch => {
    const id = this.props.match.params.id
    const username = this.props.auth.user.username

    const postData = {
      title: this.state.title,
      description: this.state.description,
    };

    dispatch(updatePost(id, postData), () => {
      history.push(`/profile/${username}/posts`)
    })
  }
}

Если я что-то неправильно понял, отправьте больше кода, где вы его используете.

...