header 中的顶部导航项在键入时不断闪烁

Top navigation items in header constantly flickers when typing

header 中的图像在我打字时不断闪烁。请问如何停止右上角或accessoryRight的闪烁?我正在使用来自 UI Kitten UI 库的 TopNavigation component。我认为这不正常,根本不应该发生。我一定是做错了什么。

https://youtu.be/fQppQn-RzeE(如何嵌入?编者,先谢过了!)

标题和导航右侧出现闪烁 Header。

我为 TopNavigation 制作了一个单独的组件,然后在各自的屏幕中调用它。

我尝试过的事情:

欢迎任何意见,不胜感激!

顶部导航:

const NavHeader = ({ navProps }) => {
  const navigateBack = () => {
    navProps.navigation.goBack();
  };

  const [type, setType] = React.useState('');

  React.useEffect(() => {
    setType(navProps.type);
  }, [navProps]);

  const BackIcon = props => <Icon {...props} name='arrow-back' />;

  const BackAction = () => (
    <TopNavigationAction icon={BackIcon} onPress={navigateBack} />
  );

  const renderBrand = () => (
    <View style={styles.titleContainer}>
      <Image source={require('../../assets/images/brand.png')} />
    </View>
  );

  const renderLogo = () => (
    <Image source={require('../../assets/images/logo.png')} />
  );

  return (
    <TopNavigation
      style={styles.topNav}
      accessoryLeft={navProps.backNav && BackAction}
      accessoryRight={
        type === 'register' || type === 'profile' ? renderLogo : null
      }
      title={type === 'landing' || type === 'auth' ? renderBrand : null}
      alignment='center'
    />
  );
};

导入示例:

<KeyboardAvoidingView
      style={styles.kbContainer}
      behavior={Platform.OS === 'ios' ? 'padding' : null}
    >
  <SafeAreaView style={styles.parentContainer}>
    <NavHeader navProps={navProps} /> // Imported custom Header component here
    <ScrollView>
      {other content}
    </ScrollView>
  </SafeAreaView>
</KeyboardAvoidingView>

也许只需要一次图像而不是每次渲染都可能会有所帮助。 尝试将其添加到文件顶部(而不是在组件函数内)

const brandImage = require('../../assets/images/brand.png');
const logoImage = require('../../assets/images/logo.png');

然后在你的 props 而不是 inline require 中使用变量:

const renderBrand = () => (
    <View style={styles.titleContainer}>
      <Image source={brandImage} />
    </View>
  );

  const renderLogo = () => (
    <Image source={logoImage} />
  );

编辑:

既然这行不通,也许利用 useMemo 来记忆显示图像的组件?

类似


const renderBrand = useMemo(() => (
    <View style={styles.titleContainer}>
      <Image source={brandImage} />
    </View>
  ),[]);

  const renderLogo = useMemo(() => (
    <Image source={logoImage} />
  ),[]);