Перенаправить на созданную запись после создания сообщения Saga - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть блог, где вы можете создать пост, который отлично работает. То, что я хочу сделать, это перенаправить на вновь созданный пост после создания.

postActions.js:

export function* watchCreatePost() {
  yield takeEvery(CREATE_POST, createPostSaga);
}

function* createPostSaga(action) {
  const token = yield select(selectToken);
  const headerParams = {
    Authorization: `JWT ${token}`
  };
  const apiCall = () => {
    let formData = new FormData();
    formData.append("title", action.payload.title);
    formData.append("content", action.payload.content);
    formData.append("thumbnail", action.payload.thumbnail);
    formData.append("tags", action.payload.tags);
    formData.append("slug", generateSlug(action.payload.title));
    return axios({
      method: "post",
      url: "/posts/",
      data: formData,
      headers: headerParams
    })
      .then(response => response.data)
      .catch(err => {
        throw err;
      });
  };

  try {
    const response = yield call(apiCall);
    const post = {};
    post[response.id] = { ...response };
    yield put({ type: ADD_POST, payload: response });
  } catch (error) {
    console.log(error);
  }
}

Как я уже сказал, это создает сообщение хорошо, но я не уверен, как перенаправить после его завершения. Я знаю, что в redux-thunk вы можете использовать .then(), но это не вариант, насколько я могу судить по redux-saga.

1 Ответ

0 голосов
/ 22 ноября 2018

Ваше действие ADD_POST, вероятно, будет управляться редуктором, который обновляет вид массива posts в состояние, которое я предполагаю?

Если это так - добавьте компонент phantom с renderфункция, которая возвращает null - добавляет массив state.posts к его реквизиту состояния - как только обновляется state.posts, вы можете перенаправить пользователя, потому что, поскольку это компонент, у вас есть доступ к истории

Если выиспользуйте React-router или подобную библиотеку, вы можете импортировать функцию navigate и перенаправить пользователя внутрь саги

Дайте мне знать

...