RN 常见问题

React/RCTBridgeModule.h not found

#import <React/RCTBridgeModule.h> 全部替换为
#import "RCTBridgeModule.h"

同样也有可能遇到 #import "RCTBridgeModule.h" 找不到,可以尝试替换为 #import <React/RCTBridgeModule.h>

Ignoring return value of function declared with 'warn_unused_result' attribute

上述错误出现在 RCTWebSockect文件中

SecRandomCopyBytes(kSecRandomDefault, keyBytes.length, keyBytes.mutableBytes);  全部替换为
(void)SecRandomCopyBytes(kSecRandomDefault, keyBytes.length, keyBytes.mutableBytes);

另外一种解决方案(没试过)

int result = SecRandomCopyBytes(kSecRandomDefault, keyBytes.length, keyBytes.mutableBytes);
  assert(result == 0);

"react-native-scrollable-tab-view" 组件的ScrollableTabBar 默认选中效果出不来,也就是 initialPage 无效

react-native-scrollable-tab-view 使用的是 0.6.7 版本,到 ScrollableTabBar.js 中

this.props.scrollValue._value 全部替换为
this.props.scrollValue.__getValue()

或者到官网中 ()[https://github.com/skv-headless/react-native-scrollable-tab-view] 查看最新版本, 使用最新版本,

cd 工程目录
npm install react-native-scrollable-tab-view@0.7.4 --save
或者
yarn add react-native-scrollable-tab-view@0.7.4

FlatList 中 itemSeparate 部分分割线不显示

单元格item 使用的 TouchableOpacity 作为容器,当选中单元格,再上下滚动 list, 会发现itemSeparate 不显示
解决办法: TouchableOpacity 组件替换为 TouchableHighlight

npm install 报错 Unexpected end of JSON input while parsing near '...":"^1.21.4","should":'

 npm cache clean --force

xcrun: error: unable to find utility "instruments", not a developer tool or in PATH

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/

ERROR watchman --no-pretty get-sockname returned with exit code=1, signal=null, stderr= 2018-03-13T10:13:24,997: [0x7fffa5a2d3c0] the permissions on /usr/local/var/run/watchman/ex-shili001-state allow others to write to it. Verify that you own the contents and then fix its permissions by running chmod 0700 /usr/local/var/run/watchman/ex-shili001-state

chmod 0700 /usr/local/var/run/watchman/ex-shili001-state

iOS react-native-splash-screen 卡在启动页

react-navigation 设置的 initialRouteName 不是启动页,调用不了 hide方法了
友情提醒:react-native-splash-screen 流程调通后,先把 native 中的 show 注释掉,以免快速调试的过程中设置的 initialRouteName 不是启动页,造成不必要的bug😨,切身体验

react-native-linear-gradient 组件设置 borderRadius有效果,设置 borderTopRightRadius 无效

               let linearColors = ['#0E7BEE', '#00C0FF', '#00E1FF']

                <LinearGradient
                    style={[styles.linearGradient,{width: width}]}
                    start={{x: 0.0, y: 1.0}}
                    end={{x: 1.0, y: 1.0}}
                    locations={[0.13, 0.43, 1]}
                    colors={linearColors}
                ></LinearGradient>

styles.linearGradient 里添加 overflow: 'hidden', 即可达到效果

linearGradient: {
        height: 15,
        marginRight: 10,
        marginTop: 3,
        borderTopRightRadius: 8,
        borderBottomRightRadius: 8,
        overflow: 'hidden',
    },

react native version mismatch

出现这种问题又可能是启动了两个项目,版本冲突,可以先关闭 npm(终极大招,重启电脑),还不行的话,可以尝试下面
第一步:

npm prune && npm install
# OR
yarn

第二步:

npm start --reset-cache
# or
yarn start --reset-cache

Android遇到过上面都不行的情形,按照下面的解决了(iOS的目前还没有遇到过这种特殊情况)

打开 android/app/build.gradle 将

 compile "com.facebook.react:react-native:+"


尾部的"+"号 替换成 "0.54.4", 强制指定编译版本, OK!  

 以上方法可以解决目前的问题, 希望知道具体原因的大佬给出详细的解释 ! 

附加:如果还是不行, 就用如下格式:

compile ("com.facebook.react:react-native:xx.xx.xx") { force = true }  

/Users/lucascorreia/Documents/workspace/college/PayIt/node_modules/react-native-picker/android/src/main/java/com/beefe/picker/PickerViewModule.java:362: error: cannot find symbol if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

进入 android -> build.gradle

文件最末尾添加

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 27
                
                defaultConfig {
                    targetSdkVersion 27
                }
            }
        }
    }
}

canOverrideExistingModule=true

android\app\src\main\java\com\project\MainApplication.java文件中方法 getPackages 里第三方库重复导入

一般这样的情况上面 import 也会有重复的,去掉所有重复的

protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          VectorIconsPackage()            
        , new VectorIconsPackage()
      );
    }


上面改完后,android\app\build.gradle

dependencies {
	// 去掉重复的
}

error react-native@0.57.7: The engine "node" is incompatible with this module. Expected version ">=8.3".

error Found incompatible module

要升级node.js 版本
方法一:

npm install -g n
sudo n stable

设置默认指定模拟器

1.获取模拟器名称

xcrun simctl list devices

2.修改package.json 文件 的 scripts 配置,此处的 run-ios 也可以叫别的

"scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest",
    "run-ios": "react-native run-ios --simulator 'iPhone 7 Plus'"

  },

3. 运行,以后只需执行下面命令即可

npm run-ios
posted @ 2017-10-14 23:37  shidaying  阅读(1087)  评论(0编辑  收藏  举报