0

每次我的列表顺序发生变化时,我都试图让我的平面列表动画。为此,我尝试使用来自 react native 的 LayoutAnimation API。我的状态通过 redux 更新。当我在列表中删除或添加新项目时,它完全可以正常工作,但当我尝试更改所有项目中的 sortOrder 时却不行。

代码

当我完成锻炼时。我记录了从我的 API 返回给我重新排序的新的锻炼列表的锻炼。

LayoutAnimation.easeInEaseOut();
dispatch(logWorkout(inputWorkout));
navigation.navigate("WorkoutListScreen");

日志锻炼

export const logWorkout = (workout: Workout) => async (
  dispatch: Dispatch<WorkoutDispatchTypes>
) => {
  console.log('WORKOUT_LOG_ACTION');
  // dispatch({
  //     type: LOG_WORKOUT_LOADING,
  // })

  _logWorkout(workout)
    .then((result: any) => {
      handleNewTokenForRequest(result.headers.authorization, dispatch);
      // LayoutAnimation.easeInEaseOut()
      dispatch({
        type: LOG_WORKOUT_SUCCESS,
        payload: {
          workoutList: result.data.filter(
            (item: any) => item.archived === false
          ),
          archivedWorkoutList: result.data.filter(
            (item: any) => item.archived === true
          ),
          message: lang.t('LOG_WORKOUT_SUCCESS'),
        },
      });

      dispatch < any > getLogHistory();
    })
    .catch((err) => {
      if (handleUnauthorizedRequest(err, dispatch)) return;
      console.log(err.response);
      console.log(err);
      dispatch({
        type: LOG_WORKOUT_FAIL,
        payload: {
          message: lang.t('LOG_WORKOUT_FAIL'),
        },
      });
    });
};

尝试

  • 我将每个项目的 sortOrder 作为项目的键。
  • Flatlist 的 KeyExtractor 也使用了项目的 sortOrder。
  • 我的 LayoutAnimation 在我的状态更新之前执行。
  • 我也尝试过使用来自 react reanimated 的 Transitions
  • 还添加了以下代码以使其适用于android
if (Platform.OS === 'android') {
  if (UIManager.setLayoutAnimationEnabledExperimental) {
    UIManager.setLayoutAnimationEnabledExperimental(true);
  }
}

我真的不知道还能尝试什么。如果您需要一些代码或更多信息,请告诉我。

有人给我小费吗?我真的不明白为什么它不起作用。

没人知道吗?我仍然无法解决问题。

4

0 回答 0