react-native - 在标题中显示自定义组件

标签 react-native react-navigation react-native-ios

在一个屏幕上,我希望在标题上显示一个自定义组件。

我尝试过:

 const MyScreen = ({route, navigation}) => {
  
  navigation.setOptions({
    headerTitle: props => {
      <MyComponent {...props} />;
    },
  });

  ...
 export default MyScreen;

但它显示为空白,如下所示:

enter image description here

为了进一步验证该方法是否正确,我还尝试简单地显示一段文字:

navigation.setOptions({
    headerTitle: props => {
      <Text {...props}> Hello </Text>;
    },
  });

它还在页眉标题区域中显示空白。我缺少什么?如何在标题中显示自定义组件?

(MyScreen 由堆栈导航器托管)

最佳答案

问题是您没有返回组件,因此它没有显示。

你应该写:

const MyScreen = ({route, navigation}) => {
  
React.useLayoutEffect(() => {
  navigation.setOptions({
    headerTitle: props => {
      return <MyComponent {...props} />;
    },
  });
}, [navigation]);
  ...
export default MyScreen;

或者更简洁的语法:

const MyScreen = ({route, navigation}) => {
  
React.useLayoutEffect(() => {
  navigation.setOptions({
    headerTitle: props => <MyComponent {...props} />,
  });
}, [navigation]);
  ...
export default MyScreen;

您还需要使用 useLayoutEffect,因为您无法从不同组件的函数体内更新组件。
useLayoutEffect 在渲染之后、屏幕视觉更新之前同步运行,这将防止显示标题时屏幕闪烁。

顺便说一句,由于您似乎不需要使用函数作为组件的 Prop ,因此您可以直接在导航器中定义此选项,如下所示:

<Stack.Navigator>
  <Stack.Screen
    name="MyScreen"
    component={MyScreen}
    options={{ headerTitle: props => <MyComponent {...props} /> }}
  />
</Stack.Navigator>

关于react-native - 在标题中显示自定义组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64895039/

相关文章:

javascript - react 导航 v5 自定义抽屉路线

react-native - React Native FlatList - 变量列

javascript - 如何在 map 函数的每次迭代后渲染不同的组件

android - 在 Android-React native 中处理不同屏幕尺寸的问题

ios - 导航栏和标签栏没有一起出现

react-native - header 未显示在react-navigation-drawer React-Native中

react-native - 无法在设备上使用 Live Reload/Hot Reload

react-native - React Native 中不同类型的导入?

ios - 在 React Native bridge 上调用方法时 Bridge 为 nil,使用单例?

react-native - 如何独立地证明(左、右、中)每个 child ?