我如何在带有React
- 我如何在带有React 推荐度:
- 相关推荐
我如何在带有React
我有一个独立的标题:
import React, { useContext } from "react";
import { Appbar } from "react-native-paper";
import { UserContext } from "../contexts/UserContext";
import { LanguageContext } from "../contexts/LanguageContext";
import localeSelect from "../services/localeSelect";
import { title } from "../data/locales";
function Header() {
const { user } = useContext(UserContext);
const { language } = useContext(LanguageContext);
return (
<Appbar.Header>
<Appbar.Action icon="menu" />
{!user && (
<>
<Appbar.Content
title={localeSelect(language, title)}
color="#ffffff"
/>
<Appbar.Action
icon="login"
color="#ffffff"}
/>
<Appbar.Action icon="account-plus" color="#ffffff" />
</>
)}
{user && (
<>
<Appbar.Content
title={localeSelect(language, title)}
color="#ffffff"
/>
</>
)}
</Appbar.Header>
);
}
export default Header;
但是,我一直在努力寻找一种将其连接到主要组件中的Stack.Navigator的方法:
import "react-native-gesture-handler";
import React, { useContext } from "react";
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
import { View } from "react-native";
import Header from "./components/Header";
import Home from "./components/Home";
import Login from "./components/Login";
import GameNotes from "./components/GameNotes";
import { UserContext } from "./contexts/UserContext";
const Stack = createStackNavigator();
export default function ComponentContainer() {
const { user } = useContext(UserContext);
return (
<View>
<NavigationContainer>
<Header />
<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>
);
}
显然,这不起作用,因为标头没有嵌套在Stack.Navigator中。您也不能将其嵌套在Stack.Navigator中,因为它仅接受Stack.Screen作为子项。
我也尝试过使用RootNavigation作为实现此目的的方法,但同样也失败了。那么,使用该标题导航我的应用程序我应该怎么做?
回答如下:因此,当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>
);
}
这通常是您处理两个同级组件之间的交互的方式,父组件将回调传递给一个,以便第一个孩子可以在事件发生时通知,然后父级通过更改第二个孩子的响应状态来采取行动至。
最新文章
- 俞敏洪大学经典励志演讲:像树一样活着
- Annotation 和Spring Annotation 知识整理
- 【CocosBuilder 开发系列之一】cocos2dx使用CocosBuilder(编辑器)完成基础骨骼动画
- SNMP协议简介
- 大型高并发高负载网站的系统架构[转载]
- 非诚勿扰php男嘉宾,非诚勿扰 php
- 软件质量有什么特性?
- VSS2005使用方法
- k8s资源限制——资源的配额管理(Resource Quotas)
- C语言中的void和void指针
- Kyligence 春季论坛成功举办,助力企业构建数字化管理新体系
- 二叉树的五种遍历方式
- SimpleDateFormat类的使用
- 前端必备:五大css自动化生成网站(稀有级别!)
- 集合类 CList的使用
- Python爬虫抓取网页图片
- shiro的基本认识