每次我的列表顺序发生变化时,我都试图让我的平面列表动画。为此,我尝试使用来自 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);
}
}
我真的不知道还能尝试什么。如果您需要一些代码或更多信息,请告诉我。
有人给我小费吗?我真的不明白为什么它不起作用。
没人知道吗?我仍然无法解决问题。