Вы почти закончили, но, к сожалению, я думаю, что это невозможно с реакцией навигации 4. В последней версии 5.0, которая теперь готова к производству, вы должны переписать свои стеки.
В 5.0 вы можете использовать useFocusEffect , который приятно обнаруживать Обратные действия . Итак, ваш заголовок выглядит так:
function SearchBar(props) {
return (
<TextInput />
);
}
function StackScreen() {
return (
<Stack.Navigator>
<Stack.Screen
name="Home"
component={HomeScreen}
options={{ headerTitle: props => <SearchBar {...props} /> }}
/>
</Stack.Navigator>
);
}
Проблема в том, что вы должны повторять опции и использовать логи FocusEffect c на каждом экране.
Другой подход может быть:
- Отключить все заголовки глобально
- На всех ваших экранах создайте макет, подобный следующему:
<View style={{ flex: 1 }}>
<MyAppbarHeader title={'PageA'} resetOnBack={false/true} />
<View style={{ flex: 1, margin: 8 }}>
<FlatList
data={someDataOnMyScreen}
renderItem={renderItem}
/>
</View>
</View>
В MyAppbarHeader
вы можете передать заголовок как реквизиты и другие реквизиты, такие как resetOnBack и реализуют логи c в этом функциональном компоненте.