Как я могу остановить действие запроса на отправку?

#javascript #node.js #reactjs #react-native #redux-saga

Вопрос:

я использую react-native с redux-saga

Я отправляю запрос FLFOOD_UP_REQUEST с помощью useEffect при первоначальном отображении на странице FollowFood.

Однако, если я вернусь на другую страницу до того, как она станет FLFOOD_UP_SUCCESS, FLFOOD_UP_REQUEST не остановится, и позже она станет FLFOOD_UP_SUCCESS, что приведет к ошибке. Если FLFOOD_UP_REQUEST выполняется и переходит на другую страницу, то FLFOOD_UP_SUCCESS завершается успешно, и экран страницы не отображается.

Поэтому я хочу сделать следующее: даже если FLFOOD_UP_REQUEST будет выполнен из-за эффекта использования, если я перемещу другую страницу до FLFOOD_UP_SUCCESS, FLFOOD_UP_REQUEST остановится, и я надеюсь, что FLFOOD_UP_SUCCESS не будет выполнен.

это мой код

(FollowFood.js)

     const FollowFood = () => {
      useEffect(() => {
        dispatch({
          type: FLFOOD_UP_REQUEST,
        });
      }, []);

      return (
        <>
          <FlatList
            keyExtractor={(item) => String(item.id)}
            onEndReached={() => {
              EndReached();
            }}
            onEndReachedThreshold={2}
            refreshing={loading}
            renderItem={({item}) => (
              <ImageContainer>
                <CardFollow item={item} Follow={Follow} />
              </ImageContainer>
            )}
            ListEmptyComponent={<LoadingFood label={'no.'} />}
          />
        </>
      );
    };

    export default FollowFood;
 

(saga.js)

     function* flfoodPost(action) {
      try {
        const result = yield call(flfoodUpAPI, action.data);
        yield put({
          type: FLFOOD_UP_SUCCESS,
          data: result.data,
        });
      } catch (err) {
          yield put({
            type: FLFOOD_UP_FAILURE,
            error: err.response.data,
          });
        }
      }
 

Ответ №1:

В чем заключается ошибка, которую вы получаете? Вы не можете что-то передать?

Комментарии:

1. Если FLFOOD_UP_REQUEST выполняется и переходит на другую страницу, то FLFOOD_UP_SUCCESS завершается успешно, и экран страницы не отображается.

Ответ №2:

Нужна дополнительная информация о FLFOOD_UP_REQUEST том, вызывается ли он с другого экрана, но на основе информации, приведенной здесь, вы можете использовать переменную FLFOOD_COMPLETED_IN_PAGE и отменить SUCCESS , если она не была завершена с этой страницы.

Чтобы проверить, заполнено ли оно на той же странице, у вас могут быть другие переменные :

  1. fflood_requested = false
  2. fflood_request_over = false
  3. fflood_request_status = true
  4. FLFOOD_COMPLETED_IN_PAGE = false

В FollowFood.js настоящее время вы можете прослушивать эти изменения переменных, если измененные пользователем состояния экрана не будут находиться в надлежащем состоянии.

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