我在App.js中定义了如下导航
<NavigationContainer>
<Stack.Navigator>
<StackScreenCard
name="HomeScreen"
componentName="HomeScreen"
title="Country City Information"
/>
<Stack.Screen name="CountriesGrid" component={CountriesGrid} />
</Stack.Navigator>
</NavigationContainer>
在App.js中使用以下代码导入StackScreenCard
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import StackScreenCard from "./components/ui/StackScreenCard";
StackScreenCard.js代码如下
import { createNativeStackNavigator } from "@react-navigation/native-stack";
const StackScreenCard = ({ name, componentName, title }) => {
const Stack = createNativeStackNavigator();
return (
<Stack.Screen
name={name}
component={componentName}
options={{
title: { title },
headerTintColor: "white",
headerTitleAlign: "center",
}}
/>
);
};
export default StackScreenCard;
它给出错误消息
错误:导航器只能包含“Screen”、“Group”或“React.Fragment”作为其直接子级(找到屏幕“HomeScreen”的“StackScreenCard”)。若要在导航器中呈现此组件,请在“component”属性中将其传递给“Screen”。
如果我从App.js中删除StackScreenCard
调用,那么屏幕就可以正常工作了。难道不能使用动态的Stack.Screen吗?基本上,我想像创建一个单独的组件一样创建它,这样我就可以在那里写一次css,然后针对不同的屏幕多次调用该组件。
1条答案
按热度按时间bvjxkvbb1#
该<Stack.Screen />组件需要直接在其父组件stack.navigator和navigatorContainer内部进行渲染,因此单独做一个组件在屏幕内部进行渲染,而不是渲染返回屏幕的组件
不用在stack.navigator中创建组件并进行渲染,stack.navigator会返回stack.screen组件,你可以直接渲染一个动态组件并在screen中命名它,这样你就可以创建一个单独的组件,并做任何你想做的事情,比如样式,传递数据等等。你甚至可以在这个组件中创建嵌套的导航。在这个例子中,比如说Home。现在这个Home组件可以返回任何东西。
在App.js中
在组件ScreenCard中
您可以根据需要更改此屏幕组件
如果你想传递 prop 给这个组件,你可以做另一个组件,它将返回这个特定的组件与 prop ,让我来告诉你
在App.js中
现在你可以把你喜欢的 prop 传递给这个组件并动态地改变它。还有其他的方法。请随意尝试。