То есть вы хотите что-то изменить в Stack.Navigator
, когда в Header
происходит какое-то действие? Скорее всего, вам нужно передать обратный вызов компоненту Header
из ComponentContainer
, который Header
будет вызывать, когда пользователь что-то щелкает. Внутри этого обратного вызова вы можете изменить свое состояние, чтобы изменить Stack.Navigator
, или выполнить какое-либо другое действие. Обратный вызов будет определен внутри ComponentContainer
.
Я не совсем уверен, как все это работает в react-native
, но в React это может выглядеть так:
Заголовок:
// Imports
function Header(onPressCallback) {
const { user } = useContext(UserContext);
const { language } = useContext(LanguageContext);
return (
<Appbar.Header>
<Appbar.Action icon="menu" onPress={() => onPressCallback('menu')} />
// Other Header items
</Appbar.Header>
);
}
export default Header;
ComponentContainer:
// Imports
const Stack = createStackNavigator();
const onPressHandler = (headerItemName) => {
// Do something in response to a user clicking on the "menu" icon for example
// Maybe something like change the route on the Stack (don't know this API)
}
export default function ComponentContainer() {
const { user } = useContext(UserContext);
return (
<View>
<NavigationContainer>
<Header onPressCallback={onPressHandler} />
<Stack.Navigator initialRouteName="Home">
{user ? (
<Stack.Screen name="Home" component={GameNotes} />
) : (
<Stack.Screen name="Home" component={Home} />
)}
<Stack.Screen name="Login" component={Login} />
</Stack.Navigator>
</NavigationContainer>
</View>
);
}
Это то, как вы обычно обрабатываете взаимодействия между двумя одноуровневыми компонентами, родительский компонент передает обратный вызов одному, так что первый ребенок может уведомить, когда что-то произошло, а затем родитель принимает меры, изменив состояние, на которое второй ребенок должен ответить.