安装版本 6 时如何解决 React 本机导航错误
How to resolve React native navigation Error while installing version 6
我刚刚安装了 React Navigation 版本 6,但收到以下错误
尝试在空对象引用上调用接口方法 boolean com.swmansion.reanimated.layoutReanimation.NativeMethodsHolder.isLayoutAnimationEnabled()
下面是我的代码
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import 'react-native-gesture-handler';
import React from 'react';
import {
SafeAreaView,
ScrollView,
StatusBar,
StyleSheet,
Text,
useColorScheme,
View,
} from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import Upload from './Screens/Upload';
import Display from './Screens/Display';
const Stack = createStackNavigator()
function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen
name='Screen_A'
component={Upload}
>
</Stack.Screen>
<Stack.Screen
name='Screen_B'
component={Display}
>
</Stack.Screen>
</Stack.Navigator>
</NavigationContainer>
);
};
export default App;
这是我第一次使用 react-native 和 react-native 导航希望构建应用程序
有两种方法可以解决
在你的 json 包中有一个名为 "react-native-reanimated": "^2.3.0" 的包,删除这个包并安装 "react-native-reanimated": "^2.2. 4
然后重启 metro 然后重新构建
第二种方式
1° - 通过编辑 android/app/build 打开 Hermes 引擎。gradle
project.ext.react = [
enableHermes: true // <- here -- change false for true
]
2° - 插头在 MainApplication.java
中恢复
android\app\src\main\java\com\<yourProjectName>\MainApplication.java
import com.facebook.react.bridge.JSIModulePackage; // <- add this
import com.swmansion.reanimated.ReanimatedJSIModulePackage; // <- add this
...
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
...
@Override
protected String getJSMainModuleName() {
return "index";
}
// add more this "Override" below <----------------
@Override
protected JSIModulePackage getJSIModulePackage() {
return new ReanimatedJSIModulePackage(); // <- add
}
};
...
所有过程之后
反应导航文档
要完成 react-native-gesture-handler 的安装,请在您的入口文件的顶部添加以下内容(确保它在顶部并且之前没有其他内容),例如 index.js 或 App.js
进口'react-native-gesture-handler';
全部保存并重建
( Android 是:npx react-native 运行-android )
我的package.json
"@react-navigation/drawer": "^6.1.8"
"@react-navigation/native": "^6.0.6"
"@react-navigation/native-堆栈": "^6.2.5"
“本机反应”:“0.66.4”
“react-native-gesture-handler”:“^2.1.0”
我用第一种方法解决了
为我做一些改动
步骤:1 npm i react-native-reanimated
(如果还没有,请添加)
并将 Reanimated 的 babel 插件添加到您的 babel.config.js
...
plugins: [
...
'react-native-reanimated/plugin',
],
};
步骤:2
通过编辑 android/app/build.gradle
打开 Hermes 引擎
enableHermes: true // <- here
步骤:3 插件在 MainApplication.java
中恢复
import com.facebook.react.bridge.JSIModulePackage; // <- add
import com.swmansion.reanimated.ReanimatedJSIModulePackage; // <- add
...
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
...
@Override
protected String getJSMainModuleName() {
return "index";
}
@Override
protected JSIModulePackage getJSIModulePackage() {
return new ReanimatedJSIModulePackage(); // <- add
}
};
...
如果更改已完成,现在清理并重建
我刚刚安装了 React Navigation 版本 6,但收到以下错误
尝试在空对象引用上调用接口方法 boolean com.swmansion.reanimated.layoutReanimation.NativeMethodsHolder.isLayoutAnimationEnabled()
下面是我的代码
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import 'react-native-gesture-handler';
import React from 'react';
import {
SafeAreaView,
ScrollView,
StatusBar,
StyleSheet,
Text,
useColorScheme,
View,
} from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import Upload from './Screens/Upload';
import Display from './Screens/Display';
const Stack = createStackNavigator()
function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen
name='Screen_A'
component={Upload}
>
</Stack.Screen>
<Stack.Screen
name='Screen_B'
component={Display}
>
</Stack.Screen>
</Stack.Navigator>
</NavigationContainer>
);
};
export default App;
这是我第一次使用 react-native 和 react-native 导航希望构建应用程序
有两种方法可以解决
在你的 json 包中有一个名为 "react-native-reanimated": "^2.3.0" 的包,删除这个包并安装 "react-native-reanimated": "^2.2. 4
然后重启 metro 然后重新构建
第二种方式
1° - 通过编辑 android/app/build 打开 Hermes 引擎。gradle
project.ext.react = [
enableHermes: true // <- here -- change false for true
]
2° - 插头在 MainApplication.java
中恢复android\app\src\main\java\com\<yourProjectName>\MainApplication.java
import com.facebook.react.bridge.JSIModulePackage; // <- add this
import com.swmansion.reanimated.ReanimatedJSIModulePackage; // <- add this
...
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
...
@Override
protected String getJSMainModuleName() {
return "index";
}
// add more this "Override" below <----------------
@Override
protected JSIModulePackage getJSIModulePackage() {
return new ReanimatedJSIModulePackage(); // <- add
}
};
...
所有过程之后 反应导航文档 要完成 react-native-gesture-handler 的安装,请在您的入口文件的顶部添加以下内容(确保它在顶部并且之前没有其他内容),例如 index.js 或 App.js
进口'react-native-gesture-handler';
全部保存并重建 ( Android 是:npx react-native 运行-android )
我的package.json
"@react-navigation/drawer": "^6.1.8" "@react-navigation/native": "^6.0.6" "@react-navigation/native-堆栈": "^6.2.5" “本机反应”:“0.66.4” “react-native-gesture-handler”:“^2.1.0”
我用第一种方法解决了
为我做一些改动
步骤:1 npm i react-native-reanimated
(如果还没有,请添加)
并将 Reanimated 的 babel 插件添加到您的 babel.config.js
...
plugins: [
...
'react-native-reanimated/plugin',
],
};
步骤:2 通过编辑 android/app/build.gradle
打开 Hermes 引擎 enableHermes: true // <- here
步骤:3 插件在 MainApplication.java
中恢复 import com.facebook.react.bridge.JSIModulePackage; // <- add
import com.swmansion.reanimated.ReanimatedJSIModulePackage; // <- add
...
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
...
@Override
protected String getJSMainModuleName() {
return "index";
}
@Override
protected JSIModulePackage getJSIModulePackage() {
return new ReanimatedJSIModulePackage(); // <- add
}
};
...
如果更改已完成,现在清理并重建