如何使用 react-navigation 通过 React Native Web 设置文档标题?
How to set document title by React Native Web with react-navigation?
我的 Web 应用程序是由 React Native Web 使用 react-navigator 创建的。
react-navigator 默认设置 RouteName 为 document.title。
例如
<Stack.Navigator screenOptions={{ headerShown: false }}>
<Stack.Screen name="root" component={RootScreen} />
<Stack.Screen name="search" component={SearchScreen} />
</Stack.Navigator>
生成
...
<head>
<title>root</title>
...
我想要的
按需更改 document.title。
我试过但没有用的方法
尝试直接访问文档 object,但下面的代码不起作用。
export default function RootScreen({ navigation }) {
useEffect(() => {
document.title = `My Web App | ${someMessage}`
})
我发现 Expo for Web 基本上将屏幕标题设置为文档标题。所以我做了这样的事情:
import { Platform } from 'react-native';
const title = (text) => Platform.select({ web: `My Web App | ${text}`, default: text });
<Stack.Navigator screenOptions={{ headerShown: false }}>
<Stack.Screen name="root" component={RootScreen} options={{ title: title('root') }} />
<Stack.Screen name="search" component={SearchScreen} options={{ title: title('search') }} />
</Stack.Navigator>
然后您可以将 title
函数修改为 return 各种屏幕的预期标题。
这让我花了我早上最好的时间来弄清楚。
有一种方法可以在一个地方设置标题,而不是在每个屏幕上设置。
<NavigationContainer
documentTitle={{
formatter: (options, route) =>
`${options?.title ?? route?.name} - My Cool App`,
}}
>
https://reactnavigation.org/docs/navigation-container/#documenttitle
当您在导航容器上进行此更改时,这也适用于嵌套导航。
您可以在 React 组件中调用 navigation.setOptions({ title: 'some title' })
https://reactnavigation.org/docs/headers/#updating-options-with-setoptions
我的 Web 应用程序是由 React Native Web 使用 react-navigator 创建的。
react-navigator 默认设置 RouteName 为 document.title。
例如
<Stack.Navigator screenOptions={{ headerShown: false }}>
<Stack.Screen name="root" component={RootScreen} />
<Stack.Screen name="search" component={SearchScreen} />
</Stack.Navigator>
生成
...
<head>
<title>root</title>
...
我想要的
按需更改 document.title。
我试过但没有用的方法
尝试直接访问文档 object,但下面的代码不起作用。
export default function RootScreen({ navigation }) {
useEffect(() => {
document.title = `My Web App | ${someMessage}`
})
我发现 Expo for Web 基本上将屏幕标题设置为文档标题。所以我做了这样的事情:
import { Platform } from 'react-native';
const title = (text) => Platform.select({ web: `My Web App | ${text}`, default: text });
<Stack.Navigator screenOptions={{ headerShown: false }}>
<Stack.Screen name="root" component={RootScreen} options={{ title: title('root') }} />
<Stack.Screen name="search" component={SearchScreen} options={{ title: title('search') }} />
</Stack.Navigator>
然后您可以将 title
函数修改为 return 各种屏幕的预期标题。
这让我花了我早上最好的时间来弄清楚。 有一种方法可以在一个地方设置标题,而不是在每个屏幕上设置。
<NavigationContainer
documentTitle={{
formatter: (options, route) =>
`${options?.title ?? route?.name} - My Cool App`,
}}
>
https://reactnavigation.org/docs/navigation-container/#documenttitle
当您在导航容器上进行此更改时,这也适用于嵌套导航。
您可以在 React 组件中调用 navigation.setOptions({ title: 'some title' })
https://reactnavigation.org/docs/headers/#updating-options-with-setoptions