【问题标题】:How can I stop the dispatch request action?如何停止调度请求操作?
【发布时间】:2021-05-22 02:45:08
【问题描述】:

我正在使用 react-native 和 redux-saga

我正在通过在 FollowFood 页面上的初始呈现中使用 useEffect 来调度 FLFOOD_UP_REQUEST。

但是,如果我在它变为 FLFOOD_UP_SUCCESS 之前返回另一个页面,则 FLFOOD_UP_REQUEST 不会停止,稍后会变为 FLFOOD_UP_SUCCESS,从而导致错误。如果执行了 FLFOOD_UP_REQUEST 并移动到另一个页面,则 FLFOOD_UP_SUCCESS 成功并且页面屏幕不显示。

因此,我想做的是,即使由于useEffect执行了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,
          });
        }
      }

【问题讨论】:

    标签: javascript node.js reactjs react-native redux-saga


    【解决方案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 重置状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多