javascript - 使用本机反应创建页面构建器
问题描述
我为一个自动生成多个页面的页面写了下面的代码,但是它有一个错误并且错误是不能像String一样添加JSX,当然我也写了这个String格式的代码,但是输出的工作只是一个字符串。像字符串一样添加 JSX 需要什么?
import React from "react";
import { View, Text } from "react-native";
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
import { navigationRef } from "./RootNavigation";
const RootStack = createStackNavigator();
/*
export default function App() {
return (
<NavigationContainer
ref={navigationRef}
theme={{
colors: {
primary: "black",
background: "white",
card: "#92eef1",
text: "black",
border: "purple",
notification: "yellow"
}
}}
>
<RootStack.Navigator screenOptions={{ headerShown: true}}>
<RootStack.Screen name="SplashScreen" component={SplashScreen} />
<RootStack.Screen name="Search" component={Search} />
<RootStack.Screen name="BuildScreen" component={BuildScreen} />
<RootStack.Screen name="Info" component={Info} />
</RootStack.Navigator>
</NavigationContainer>
);
}
*/
export default function App(){
return StackCreator();
}
let state = {
name: ["Home", "SplashScreen", "Search", "BuildScreen", "Info"],
screen: [Home, SplashScreen, Search, BuildScreen, Info],
length: 5
};
function StackCreator() {
let text =
(<NavigationContainer ref={navigationRef} theme={{colors: {primary: 'black',background: 'white',card: '#92eef1',text: 'black',border: 'purple',notification: 'yellow'}}}><RootStack.Navigator screenOptions={{headerShown: false}}>;
for (let i = 0; i < state.length; i++) {
text += <RootStack.Screen name={state.name[i]} component={state.name[i]} />;
}
text += </RootStack.Navigator></NavigationContainer>);
return text;
}
function Home() {
return (
<View>
<Text>Hello</Text>
</View>
);
}
function SplashScreen() {
return (
<View>
<Text>Hello</Text>
</View>
);
}
function Search() {
return (
<View>
<Text>Hello</Text>
</View>
);
}
function BuildScreen() {
return (
<View>
<Text>Hello</Text>
</View>
);
}
function Info() {
return (
<View>
<Text>Hello</Text>
</View>
);
}
谢谢。
解决方案
JSX 期望接收有效的 React 组件数组或有效的单个 React 组件,而不是字符串。
为了实现你想要做的事情,你应该做这样的事情(未经测试):
function StackCreator() {
let screens = []
for (let i = 0; i < state.length; i++) {
screens.push(<RootStack.Screen name={state.name[i]} component={state.screen[i]} />)
}
return (
<NavigationContainer ref={navigationRef} theme={{colors: {primary: 'black',background: 'white',card: '#92eef1',text: 'black',border: 'purple',notification: 'yellow'}}}>
<RootStack.Navigator screenOptions={{headerShown: false}}>
{screens}
</RootStack.Navigator>
</NavigationContainer>
)
}
推荐阅读
- python - 有没有一种可能的方法来检测 Python 中移动光标下的标签文本?
- inria-spoon - API 函数 `replace` 不会用 CtClass 实例替换类
- javascript - Javascript,通过 += 更改 Class 值时出错
- r - 使用更改 xpath 进行刮擦:将文本模式设置为 ID?
- doxygen - 使用 doxygen 中的页面特定摘要和图像更新 HTML 部分
- spring - Atomikos:AtomikosDataSourceBean 什么时候“开始”?
- c# - 使用 C# 使用户脚本自己的代码与自己的应用程序交互
- python - pymongo create_index 不创建索引
- react-native - 返回其他组件/视图时禁用主屏幕上的可触摸
- panoramas - 如何定位一组等距矩形全景图像?