在 header 中显示自定义组件
showing custom component in header
在一个屏幕上,我希望在 header 上显示一个自定义组件。
我试过了:
const MyScreen = ({route, navigation}) => {
navigation.setOptions({
headerTitle: props => {
<MyComponent {...props} />;
},
});
...
export default MyScreen;
但是显示空白如下:
为了进一步验证方法是否正确,我也尝试简单地展示了一段文字:
navigation.setOptions({
headerTitle: props => {
<Text {...props}> Hello </Text>;
},
});
header标题区也显示空白。我错过了什么?如何在 header?
中显示自定义组件
(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
,因为您无法从另一个组件的函数 body 中更新组件。
useLayoutEffect
在渲染之后但在屏幕视觉更新之前同步运行,这将防止您的屏幕在显示标题时闪烁。
顺便说一下,由于您似乎不需要使用函数作为组件的 props,因此您可以直接在导航器中定义此选项,如下所示:
<Stack.Navigator>
<Stack.Screen
name="MyScreen"
component={MyScreen}
options={{ headerTitle: props => <MyComponent {...props} /> }}
/>
</Stack.Navigator>
在一个屏幕上,我希望在 header 上显示一个自定义组件。
我试过了:
const MyScreen = ({route, navigation}) => {
navigation.setOptions({
headerTitle: props => {
<MyComponent {...props} />;
},
});
...
export default MyScreen;
但是显示空白如下:
为了进一步验证方法是否正确,我也尝试简单地展示了一段文字:
navigation.setOptions({
headerTitle: props => {
<Text {...props}> Hello </Text>;
},
});
header标题区也显示空白。我错过了什么?如何在 header?
中显示自定义组件(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
,因为您无法从另一个组件的函数 body 中更新组件。
useLayoutEffect
在渲染之后但在屏幕视觉更新之前同步运行,这将防止您的屏幕在显示标题时闪烁。
顺便说一下,由于您似乎不需要使用函数作为组件的 props,因此您可以直接在导航器中定义此选项,如下所示:
<Stack.Navigator>
<Stack.Screen
name="MyScreen"
component={MyScreen}
options={{ headerTitle: props => <MyComponent {...props} /> }}
/>
</Stack.Navigator>