reactjs - 如果每个屏幕都有不同的 js 文件,如何使用 StackNavigator 在屏幕之间导航?
问题描述
对 React Native 来说相当新。我已阅读堆栈导航器文档,但仍然不知道如何执行此操作。
所以我有一个底部选项卡导航器,我想在其中一个选项卡中实现一个堆栈导航器,所以我可以从主选项卡屏幕导航到第二个屏幕,但从第二个屏幕到第三个屏幕我无法导航'找不到变量“导航”,这是可以理解的,因为我为每个屏幕使用不同的 js 文件。如何将导航变量传递到另一个屏幕?下面是我的代码:
OrderScreen.js:
imports...
import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();
const styles = StyleSheet.create({
...
}
});
function Orderscreen({ navigation }) {
return (
<View style={styles.welcome}>
<View styles={styles.container}>
<Button style={styles.button1} color="warning" uppercase onPress={() => { navigation.navigate('Scan QR code') }}><Text style={styles.buttonText}>Take me to screen SCAN QR CODE</Text></Button>
</View>
</View>
)
};
import { Qrcodescanner } from './qrcodescanner';
import { Menu } from './menu';
import { render } from 'react-dom';
function MenuScreen({ navigation }) {
return(
<Menu></Menu>
)
}
function QRScanScreen({ navigation }) {
return(
<Qrcodescanner></Qrcodescanner>
)
}
export default function App() {
return (
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={Orderscreen} />
<Stack.Screen name="Scan QR code" component={QRScanScreen}
options={{
headerRight: () => (
<Button shadowless
onlyIcon icon="question" iconFamily="antdesign" iconSize={30} color="info" iconColor="#fff" style={{ width: 35, height: 35, marginRight: 20 }}
/>
),
}}
/>
<Stack.Screen name="Menu" component={MenuScreen} />
</Stack.Navigator>
);
}
二维码扫描器.js:
export class Qrcodescanner extends React.Component {
...
render() {
const { hasCameraPermission, scanned } = this.state;
if (hasCameraPermission === null) {
return <Text> Requesting for camera permission </Text>;
}
if (hasCameraPermission === false) {
return <Text> No access to camera </Text>;
}
return (
<View
style={{
flex: 1,
flexDirection: 'column',
justifyContent: 'flex-end',
}}> ...
</View>
);
}
handleBarCodeScanned = ({ type, data}) => {
this.setState({
scanned: true,
});
alert(`Bar code with type ${type} and data ${data} has been scanned!`);
navigation.navigate('Menu')
};
};
所以当我扫描某些东西时,它应该导航到“菜单”屏幕,但我得到了错误:“找不到变量:导航”。如何将导航变量传递给不同的 js 文件?
解决方案
我已经看到你的 cod 并为你找到了解决方案你只需要创建一个新文件NavigationServices.js
import { NavigationActions } from "react-navigation";
let _navigator;
function setTopLevelNavigator(navigatorRef) {
_navigator = navigatorRef;
}
function navigate(routeName, params) {
_navigator.dispatch(
NavigationActions.navigate({
routeName,
params
})
);
}
// add other navigation functions that you need and export them
export default {
navigate,
setTopLevelNavigator
};
然后将文件导入您的.js
文件并使用它来导航,就像您的OrderScreen.js:
import NavigationService from "../NavigationService";
并像这样使用它。
NavigationService.navigate("Qrcodescanner");
推荐阅读
- javascript - 在由 getElementById 填充的文本输入中保留第一个零
- excel - 将 pos,neg 值替换到另一张纸上
- python - 石墨烯在其响应中发送 Python 错误消息 - 我如何告诉它更加离散?
- python - 如果字符串以开头,Python Pandas 替换子字符串
- angular - 在组件中组合输入/服务数据
- css - 来自父组件的CSS不适用于子组件Angular 9
- css - Gatsby-plugin-postcss + autoprefixer + browserslist 的 Gatsby 插件设置
- php - Adobesign PHP API v6 不为自定义字段设置位置
- octave - 如何根据结果检查数值方法的收敛性?(八度)
- javascript - 使用 iText 从 PDF 获取 Javascript