标签: react-native-navigation

React Native深度链接应用程序未打开

我遵循了下面提到的两篇文章中的所有步骤

https://hackernoon.com/react-native-deep-linking-for-ios-and-android-d33abfba7ef3

https://medium.com/react-native-training/deep-linking-your-react-native-app-d87c39a1ad5e

将应用程序安装到我的手机上后,我尝试通过提供 peopleapp://people/1 格式的 URL 从浏览器打开该应用程序。浏览器不会打开应用程序,而是打开 Google 搜索来搜索上述内容。

我使用此应用程序通过使用我的应用程序链接(https://play.google.com/store/apps/details?id=com.manoj.dlt&hl=en_US)打开我的应用程序,它正在工作。

但是如何使用我的应用程序链接从浏览器或其他应用程序打开应用程序?

任何人都有想法,如何解决这个问题?

这是我的 AndroidManifest 总代码`

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
    android:name=".MainApplication"
    android:allowBackup="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true">
    <activity
        android:name=".MainActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:screenOrientation="portrait"
        android:label="@string/app_name"
        android:windowSoftInputMode="adjustResize"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter android:label="filter_react_native">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" …
Run Code Online (Sandbox Code Playgroud)

android deep-linking react-native react-native-navigation

5
推荐指数
1
解决办法
8287
查看次数

如何在反应本机中将徽章添加到标签栏?

我正在使用 tabnavigator (createbottomBottomTabNavigator) 并需要使用 redux 进行包计数方面的帮助。

react-native redux react-redux react-native-navigation

5
推荐指数
1
解决办法
1万
查看次数

使用 React Native 导航时超出最大调用堆栈大小


我刚刚开始使用 React Native,所以我还在学习中。
我正在尝试在我的应用程序中实现导航,除了一页之外几乎所有内容都工作正常。
在应用程序中,当用户注册时,他可以作为个人或组织注册,这将导致他根据他的选择进入不同的注册表格。
但是,当我选择任一选项时,应用程序都会崩溃,并且出现以下错误:

未捕获的错误:RangeError:超出最大调用堆栈大小,堆栈。

我在网上寻找答案,大多数时候是因为导航中有无限循环。但是,我在代码中没有看到任何可能存在循环的地方,我按照对其他页面所做的那样进行了操作,这再次运行良好。

这是App.js的代码

import React from 'react';
import { StyleSheet, Text, View, TouchableOpacity } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { LinearGradient } from 'expo-linear-gradient';

import WelcomeToKarma from "./components/WelcomeToKarma.js";
import Login from "./components/Login.js";
import ForgotPass from "./components/ForgotPass.js";
import UserRegistration from "./components/UserRegistration.js";
import OpenEmail from "./components/OpenEmail.js";


function InitialScreen({ navigation }) {
  return (

    <View style={styles.container}>
      <LinearGradient
        style={{ alignItems: 'center', justifyContent: 'center', flex: 1, width: '100%' …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-native react-native-navigation

5
推荐指数
1
解决办法
9377
查看次数

如何删除反应导航顶部栏中选项卡之间的空白

如何删除反应导航顶部栏中选项卡之间的空白。所以应该发生的是选项卡大小应该根据屏幕大小进行调整。

这就是我的导航目​​前的样子。

在此输入图像描述

您可以看到选项卡非常大。它们占用了太多空间。我怎样才能获得这些空白,以便选项卡只占用足够的大小来适合选项卡名称。

我尝试过造型Tab.Navigator但没有成功。例如,我尝试过以下操作:

<Tab.Navigator
      initialRouteName="All"
      tabBarOptions={{
        scrollEnabled: true,
        labelStyle: { padding: 0, margin: 0, border: 0 },
        tabStyle: { padding: 0, margin: 0, border: 0 },
      }}
      lazy={true}
      style={{ padding: 0, margin: 0, border: 0 }}
    >

Run Code Online (Sandbox Code Playgroud)
import React from "react";
import { createStackNavigator } from "@react-navigation/stack";
import { createMaterialTopTabNavigator } from "@react-navigation/material-top-tabs";

import Home from "../screens/Home";

const Tab = createMaterialTopTabNavigator();
const Stack = createStackNavigator();

const HomeTabNavigation = () => {
  return (
    <Tab.Navigator
      initialRouteName="All"
      tabBarOptions={{
        scrollEnabled: …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-native react-native-navigation react-native-tabnavigator

5
推荐指数
1
解决办法
7184
查看次数

当 prop 在 React Native 导航中更改其值时如何更新初始参数

我有一个道具,当我更新状态时它会改变。将数据传递到屏幕时如何更新初始参数?

props.authMsg已更新,但初始参数未更新

<Stack.Screen initialParams={{authMsg: props.authMsg}} name="Login" component={Login} />
Run Code Online (Sandbox Code Playgroud)

参数值保持不变。

<Text>{props.route.params.authMsg}</Text>
Run Code Online (Sandbox Code Playgroud)

react-native react-native-navigation

5
推荐指数
1
解决办法
2773
查看次数

React-Native-Navigation,如何在通过 navigation.navigate("routename", {randomparams}) 导航到路线时刷新路线

我有一个bottomTabNavigator,它有两个stacknavigator。每个 stacknavigator 都有自己各自的屏幕。每当我使用类似的东西

navigator.navigate("Stackname" {screen:"screenname", randomProp: "seomthing")
Run Code Online (Sandbox Code Playgroud)

参数被发送到 stacknavigator,而不是屏幕本身。我通过传递解决了这个问题

initialParams=route.params
Run Code Online (Sandbox Code Playgroud)

在堆栈导航器中,但是当我第二次调用第一个代码块时它们不会刷新。有任何想法吗?

javascript react-native react-native-navigation

5
推荐指数
1
解决办法
3万
查看次数

如何导航到屏幕而不将其添加到后台堆栈?

我的导航器是:

const MyStack = createStackNavigator();

const MyRoutes= () => (
  <MyStack.Navigator headerMode='none' initialRouteName='First'>
    <MyStack.Screen name='First' component={ScreenFirst} />
    <MyStack.Screen name='Second' component={ScreenSecond} />
  </MyStack.Navigator>
);
Run Code Online (Sandbox Code Playgroud)

我的实际流程是:

const MyStack = createStackNavigator();

const MyRoutes= () => (
  <MyStack.Navigator headerMode='none' initialRouteName='First'>
    <MyStack.Screen name='First' component={ScreenFirst} />
    <MyStack.Screen name='Second' component={ScreenSecond} />
  </MyStack.Navigator>
);
Run Code Online (Sandbox Code Playgroud)

但我想显示First路线而不将其添加到后台堆栈,所以它是:

First -> (next) -> Second -> (back) -> First
Run Code Online (Sandbox Code Playgroud)

是否可以?如果是,怎么办?我在用"@react-navigation/native": "^5.6.1"

我知道我可以控制路由中的 Back 行为Second,但由于在 Android (Java/Kotlin) 中可以显示 Fragment 而无需将其添加到 backstack,我想 React Native 中也存在类似的东西。

javascript react-native react-native-navigation

5
推荐指数
1
解决办法
2370
查看次数

React 导航栏标题左侧有边距

我正在使用React-NavigationStackNavigator在我的反应本机应用程序的顶部实现一个导航栏,它显示应用程序徽标居中和右侧的菜单按钮。不过,我无法让它占据标头容器的完整空间,左侧始终有约 20px 的边距。

正如您在我的代码中看到的,我已经应用了各种样式属性,例如margin: 0padding: 0和to以及导航栏组件本身,但它们都没有帮助。alignment: fillwidth:100%headerStyleheaderContainerStyle

应用程序.js:

import React from 'react';
import { StyleSheet, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

import {Home} from "components/Home";
import {NavigationBar} from "components/NavigationBar";

const Stack = createStackNavigator();

export default function App() {
  return (
    <NavigationContainer headerStyle={styles.container}>
      <Stack.Navigator
        initialRouteName="Home" headerStyle={styles.container}
        screenOptions={{
                        headerTitleContainerStyle: styles.container,
                        headerTitleStyle: styles.title,
                        headerStyle: styles.header,
                        headerTitle: props => <NavigationBar {...props} /> …
Run Code Online (Sandbox Code Playgroud)

reactjs react-native react-native-navigation

5
推荐指数
1
解决办法
9101
查看次数

React Navigation:后退按钮执行速度非常慢

沙盒应用程序包含两个带有 React Native Stack 导航器的屏幕。

当使用按钮显式调用“navigation.navigate("Desired Screen")”时,应用程序表现良好。但是,当尝试使用后退按钮(离开初始路线屏幕时在标题上自动创建)时,屏幕加载大约需要 2 秒。

在打开“调试”和未打开“调试”的真实 Android 设备上进行了测试。这是反应本机导航的预期行为吗?

应用程序.tsx:

import React from 'react';
import {Text, View} from 'react-native';
import {Home} from './src/screens/fornav/Home';
import {MySettings} from './src/screens/fornav/MySettings';
import {createStackNavigator} from '@react-navigation/stack';
import {NavigationContainer} from '@react-navigation/native';

type RootStackParamList = {
  Home: undefined;
  MySettings: undefined;
};
const MyStack = createStackNavigator<RootStackParamList>();

const App = () => {
  return (
    <NavigationContainer>
      <MyStack.Navigator initialRouteName="Home">
        <MyStack.Screen
          name="Home"
          component={Home}
          options={{title: 'My Home Screen'}}
        />

        <MyStack.Screen name="MySettings" component={MySettings} />
      </MyStack.Navigator>
    </NavigationContainer>
  );
};

export default …
Run Code Online (Sandbox Code Playgroud)

typescript react-native react-native-navigation

5
推荐指数
0
解决办法
745
查看次数

有没有一种方法可以在每次路线/屏幕发生变化时通过反应本机导航来运行代码?

在 React 中,每次更改时我都可以location使用use-react-router执行代码,这使我可以访问historylocationmatch属性。我所做的是使用 auseEffect并在每次location属性更改时运行代码,如下所示:

import useRouter from "use-react-router";

const { location } = useRouter();

React.useEffect(() => {
  // run some code every time `location` change.
}, [location]);
Run Code Online (Sandbox Code Playgroud)

有没有办法通过react-native中的react-navigation来实现相同的行为?

更新 1 - 使用 useNavigationState 挂钩的临时解决方案

我试图检查导航状态是否发生变化并在发生变化时运行代码,为了实现这一点,我使用了useNavigationStatereact-navigation

import {useNavigationState} from '@react-navigation/native';

const navigationState = useNavigationState(state => state);

React.useEffect(() => {
  // run some code every time `location` change.
}, [navigationState]);
Run Code Online (Sandbox Code Playgroud)

这种方法有一个问题,如果您尝试在外部使用此方法 …

reactjs react-native react-native-navigation

5
推荐指数
1
解决办法
2204
查看次数