WARN 发送 `onAnimatedValueUpdate` 而没有注册监听器

问题描述 投票:0回答:0

我卡住了。我正在使用 React Native CLI 和 React Navigation 6.x 开发移动应用程序然后当我使用材料顶部选项卡导航器时,从左到右或从右到左滑动。它总是发出警告

enter image description here

我试过useFocusEffect, addListeners

import {createMaterialTopTabNavigator} from '@react-navigation/material-top-tabs';
import React, {useEffect} from 'react';
import AScreen from '../screens/Home/AScreen';
import BScreen from '../screens/Home/BScreen';

const Tab = createMaterialTopTabNavigator();
const HomeStack = () => {
  useEffect(() => {
    console.log('HomeStack');
  }, []);

  return (
    <Tab.Navigator
      screenOptions={{
        tabBarActiveTintColor: '#fff',
        tabBarStyle: {
          borderTopWidth: 0.2,
          borderTopColor: '#ccc',
        },
        tabBarIndicatorStyle: {
          backgroundColor: '#fff',
        },
        lazy: true,
      }}
      initialRouteName="A"
      shouldRasterizeIOS>
      <Tab.Screen name="A" component={AScreen} />
      <Tab.Screen name="B" component={BScreen} />
    </Tab.Navigator>
  );
};

export default HomeStack;

B 屏幕

const BScreen: React.FC = ({navigation}: any) => {
  const [refreshing, setRefreshing] = useState(false);

  useFocusEffect(
    useCallback(() => {
      const function = async () => {
        console.log('function useFocusEffect');
        await function2({pageParam: 0});
      };

      function();

    }, [navigation]),
  );

  const function2 = async ({pageParam = 0}) => {
    const limit = 10;
    const offset = pageParam * limit;

    ... DATA Handling

    if (error) {
      throw error;
    }

    if (data.length === 0) {
      return {data, nextPage: false};
    }
    return {data, nextPage: pageParam + 1};
  };

这是一个屏幕

import React, {useCallback, useEffect, useMemo, useState} from 'react';
import {VirtualizedList, ActivityIndicator, Text, View} from 'react-native';
import {hook} from '../../hooks/hook';
import MyITEM from '...';
import {useIsFocused} from '@react-navigation/native';

const AScreen: React.FC = () => {
  useEffect(() => {
    console.log('AScreen Initalized');
  }, []);

  const isFocused = useIsFocused();
  useEffect(() => {
    console.log('AScreen isFocused: ', isFocused ? 'true' : 'false');
  }, [isFocused]);

  const [refreshing, setRefreshing] = useState(false);

  ...data fetching with react-query (infinite query)

  const renderFooter = useCallback(() => {
    if (isFetchingNextPage || hasNextPage) {
      return <ActivityIndicator />;
    }
    return null;
  }, [isFetchingNextPage, hasNextPage]);

  const renderItem = useCallback(
    ({item}: any) => (
      <MyITEM />
    ),
    [],
  );

  const getItem = useCallback((data, index) => data[index], []);

  const getItemCount = useCallback(data => data.length, []);

  const onRefresh = useCallback(() => {
    setRefreshing(true);
    refetch();
    setRefreshing(false);
  }, [refetch]);

  const posts = useMemo(
    () => data?.pages?.flatMap(page => page.data) || [],
    [data?.pages],
  );

  if (status === 'loading') {
    return <ActivityIndicator />;
  }

  if (status === 'error') {
    return <Text>Error A</Text>;
  }

  return (
    <View style={{flex: 1}}>
      <VirtualizedList
        data={posts}
        renderItem={renderItem}
        keyExtractor={(item, index) => index.toString()}
        ListFooterComponent={renderFooter}
        getItem={getItem}
        getItemCount={getItemCount}
        onRefresh={onRefresh}
        refreshing={refreshing}
        onEndReached={() => {
          if (hasNextPage && !isFetchingNextPage) {
            console.log('onEndReached');
            fetchNextPage();
          }
        }}
        onEndReachedThreshold={0.5}
      />
    </View>
  );
};

export default AScreen;

我不想得到这个错误。谁能帮帮我?

react-native react-navigation react-native-navigation react-navigation-v6 react-navigation-top-tabs
© www.soinside.com 2019 - 2024. All rights reserved.