美文网首页
react-native开发笔记

react-native开发笔记

作者: 太平洋_cfd2 | 来源:发表于2019-04-24 08:46 被阅读0次

    一:出现:

    unknown platform:react-native

    ReferenceError:printExample is not defined

    错误,

    则:

    npm install / yarn install;

    npm start;

    二:出现the development server... code:500的错误

    1. Try run npm start and react-native run android. Maybe your Metro Bundler isn't started.(暂时未解决)

    2. 就是代码出错

    三:React Native 依赖踩坑实录——UnableToResolveError: Unable to resolve module `AccessibilityInfo

    0 准备: 关闭所有dev过程的console 窗口和IDE,Emulator也关了吧

    1 删除你的依赖文件夹 node_modules

    2 清除npm缓存 $ npm cache clean --force

    3 重新安装npm依赖 $ npm install

    4 Clean RN 环境并重启试试 $ npm start -- --reset-cache

    (yarn start -- --reset-cache),启动时,npm效果好

    ps: 或者npm报错:npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\Administrator\AppData\Roaming\npm-cache\_logs\2018-03-15T01_48_14_769Z-debug.log

    1. npm i npm -g(还是报错,方法不太可行)

    四:如果是安卓和iOS配置问题,切记,以官方文档为主

    五:查错不看全路径,搞的一直崩溃,在android studio里

    六:Android Studio的 Terminal下敲 gradlew  xxxx:dependencies 命令,查看依赖树,解决重复依赖

    七:android中的gradle版本依赖一定要做到统一,不然会出现重复依赖,不管是module中还是app中,都要这样做

    八:一般出现引用错误都是缓存问题,先清除缓存,在编译

    九:ReactNativeJS: undefined is not a function (near '..._reactNativeNavigation.Navigation.startTabBasedApp...')是因为:这是v1版本,要迁移,如下例子https://wix.github.io/react-native-navigation/#/docs/top-level-api-migration

    十:导入react-native-navigation-hybrid,注意导入时,link,否则出现null is object错误

    https://www.npmjs.com/package/react-native-navigation-hybrid/v/0.8.2

    link的作用也就是导入module,如:

    include ':react-native-navigation-hybrid'

    project(':react-native-navigation-hybrid').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-navigation-hybrid/android')

    十一:导入react-native-navigation-hybrid的配置问题

    https://www.npmjs.com/package/react-native-navigation-hybrid/v/0.8.2

    https://github.com/listenzz/react-native-navigation-hybrid/blob/master/doc/integration-native.md

    十二:从0开始的RN项目讲解,版本有点老,但思维还是一样的

    https://juejin.im/post/5a9f93d96fb9a028d2077c19

    十三:二维码导入报"RNSVGRect" was not found in the UIManager错误时

    react-native link is missing the last step. it is not adding "new SvgPackage()"

    Open up `android/app/src/main/java/[...]/MainApplication.java

    Add new SvgPackage() to the list returned by the getPackages() method. Add a comma to the previous item if there's already something there.

    十四:二维码生成,扫描(还未实现相册选择图片功能)

    https://www.jianshu.com/p/dd1474c0a0cf    (react-native-qrcode)

    https://www.jianshu.com/p/bfad4c158f07    (react-native-qrcode-svg, react-native-camera)

    扫描二维码界面的生成

    https://blog.csdn.net/qq_34619754/article/details/83346602

    十五:导入百度地图后出现,错误app:transformDexArchiveWithDexMergerForDebug

    https://www.jianshu.com/p/7192eb0065a0 (百度地图的插件安装方法)

    https://github.com/lovebing/react-native-baidu-map (git上,百度地图第三方库)

    这个错误的解决:这是个依赖重复的错误,实际上后面还有一句话:方法数剧增,超过64k

    解决办法是:https://www.jianshu.com/p/cddfc89ce947,android:name的名字可以考虑不改,试试看

    实在解决不了"BaiduMapView" was not found in the UIManager.,

    可采用另外的百度SDK: https://github.com/qiuxiang/react-native-baidumap-sdk

    地图的详细用法:https://blog.csdn.net/qq_39910762/article/details/82882786

    当百度地图报错:BaiduMapView was not found in the UIManager;解决方案是:

    protected void init(ReactApplicationContext reactContext) {

            if (Looper.myLooper()==null){

                Looper.prepare();

            }

            SDKInitializer.initialize(reactContext.getApplicationContext());

        }

    即:在BaiduMapPackage加上if (Looper.myLooper()==null){

                Looper.prepare();

            }

    其实在每次应用运行的时候,都会报一次Only one Looper may be created per thread,但是我没有理会,因而造成如此大的BUG,引以为戒。

    十六:百度地图出错:Authentication Error errorcode: -1 uid: -1 appid -1 msg: Current network is not available.

    // 这是给百度api加权限

    <uses-permission android:name="android.permission.USE_CREDENTIALS" />

    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />

    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    十七:报错:Could not connect to development server

    https://www.jianshu.com/p/be012c4b3e66

    解决办法:adb reverse tcp:8081 tcp:8081

    十八:百度地图xml配置详细解释

    https://zhulichao.github.io/2017/06/17/react-native-baidu-map-android/

    十九:实现自定义标记

    https://www.jianshu.com/p/030d2be37095

    Overlay:简单说明

    https://blog.csdn.net/WuLex/article/details/79530450

    Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法。

    Marker:标注表示地图上的点,可自定义标注的图标。

    Label:表示地图上的文本标注,您可以自定义标注的文本内容。

    Polyline:表示地图上的折线。

    Polygon:表示地图上的多边形。多边形类似于闭合的折线,另外您也可以为其添加填充颜色。

    Circle: 表示地图上的圆。

    InfoWindow:信息窗口也是一种特殊的覆盖物,它可以展示更为丰富的文字和多媒体信息。注意:同一时刻只能有一个信息窗口在地图上打开

    map.addOverlay方法向地图添加覆盖物

    map.removeOverlay方法移除覆盖物,注意此方法不适用于InfoWindow

    二十:大头针实际上是Overlay.Marker标签,然后用其属性,自定义icon就可以更改其图片了

    二十一:报firebase不能open时,是权限问题,比如定位权限、文件读写权限等

    二十二:des加密react-native写法

    https://blog.zhengxianjun.com/2015/05/javascript-crypto-js/

    二十四:react-native获取定位权限

    https://blog.csdn.net/mochiwxtianya/article/details/80132861

    二十五:浏览器控制台显示数组不全时:使用以下方法

    console.log(JSON.stringify(数组或对象));

    二十六:获取地图位置、相册等,需要动态权限

    React Native (六) CameraRoll 相册组件

    https://nealma.com/2016/07/29/react-native-6-cameraroll/

    React Native - 使用CameraRoll获取相册图片、并显示

    https://blog.csdn.net/qq_38719039/article/details/79469659

    react-native-image-picker图片、框架

    二十六:fetch上传图片时,大小不能超过2M

    二十七:for循环中传参,一定要注意for里面的值不能用var,得用let

    二十八:xml资源文件夹的创建方式,不能手动自己create,应该是,new->floder->xml resource floder(重点:并且,要运行react-native run-android命令;重点2:不要用android studio创建xml,也就是复制xml文本进android studio)

    二十九:app的基础设置(app名字,不能横屏、启动图等)

    https://www.twblogs.net/a/5b85b35a2b71775d1cd3bb1c/zh-cn

    https://blog.whezh.com/react-native-name-icon-launch/

    三十:加法验证码

    https://www.jianshu.com/p/f82872224566

    三十一:react-native经典库推荐

    http://www.051z.cc/food/javascript/p_343.html

    三十二:滑动验证码

    https://github.com/asyalas/react-native-verification

    其中注意:滑动异常的解决方案

    你可以尝试把

    this.move += e.nativeEvent.locationX

    改成

    this.move = gesture.dx

    三十三:Android 8.0跳坑之'Only fullscreen opaque activities can request orientation'(荣耀8报错)

    https://blog.csdn.net/DadaCockWire/article/details/80250152

    三十四:照相机和图片 react-native-image-picker以及 react-native-image-crop-picker

    https://segmentfault.com/a/1190000015735377

    三十五:在完成app时,尽可能多用库,不用考虑大小,自己学的效果太差,后期再考虑瘦包

    三十六:采用图片选择器时,用这个库

    react-native-syan-image-picker

    三十七;"data" is required in save()!错误的解决办法

    就是在storage中set或save了null,因此再报错

    三十八:js中[] == ''也是成立的,当然用===就不成立了

    三十九:退出应用采用此方法

    SplashScreenModule.java中添加

        /**

        * 退出程序

        */

        @ReactMethod

        public void exit() {

            if (getCurrentActivity() != null)

                getCurrentActivity().finish();

            System.exit(0);

        }

    四十:热更新,没有经过pushCode的实现方法

    https://juejin.im/post/5c2038bff265da61542da11c

    四十一:React Native 性能优化总结

    https://github.com/amandakelake/blog/issues/49

    四十二:React-Native Android第一次安装成功后,点击Home键,打开重启问题

    https://blog.csdn.net/Ghost_tal/article/details/89476644

    四十三:百度地图的安全码就是开放平台设置ak后,自动形成的,也就是在逆向地址编码时,需要的参数

    四十五:网易云私信

    https://github.com/reactnativecomponent/react-native-netease-im/pull/19

    四十六:字符串转数组

    var array1 = list.replace('[{', "");

    var array2 = array1.replace('}]', "");

    var array = array2.split(",");

    四十七:网易云信发送文本报错,就是glide中的string(同学说string为空的缘故)

    切换账号搞定此问题

    真正问题的来源,经过调试之后发现在ReactMsgListManager.java文件中,231行到242行注释掉,就不会崩溃了,但是图片没有显示出来

    //                        RequestManager m = Glide.with(reactContext);

    //                        DrawableTypeRequest request;

    //

    //                        if (string.startsWith("http://") || string.startsWith("https://")) {

    //                            request = m.load(string);

    //                        } else {

    //                            request = m.load(new File(string));

    //                        }

    //                        request.fitCenter()

    //                                .placeholder(IdHelper.getDrawable(reactContext, "aurora_picture_not_found"))

    //                                .override(imageView.getMaxWidth(), Target.SIZE_ORIGINAL)

    //                                .into(imageView);

    四十八:接上述,显示图片的问题的解决办法

    原来是react-native-syan-image-picker和IM库中的glide版本有冲突

    查了很久,不是兼容性问题,并不是两个版本问题

    四十九:发送图片失败,改为react-native-image-crop- picker选择图片发送就ok了

    五十:react-native库(第三方)

    https://juejin.im/post/5b915770e51d450e9f66de40

    五十一:可滚动Tab

    https://github.com/ptomasroos/react-native-scrollable-tab-view

    五十二:react-native-image-crop- picker与react-native-syan-image-picker兼容性问题:ucrop重复依赖

    根据错误信我可知是ucrop重复依赖,去library文件夹中查看,哪里有ucrop的重复,去除就好

    compile ('com.github.LuckSiege.PictureSelector:picture_library:v2.2.3') {

            exclude group: 'com.github.LuckSiege.PictureSelector', module: 'ucrop'

        }

    因为com.github.LuckSiege.PictureSelecto中也有ucrop库,因此通过此方法去掉ucrop依赖,并且还依赖了com.github.LuckSiege.PictureSelector中除ucrop的库

    五十三:朋友圈文件

    https://github.com/yubo725/rn-wechat/blob/master/app/screens/MomentScreen.js

    五十四:图片兼容后,glide的版本不兼容解决办法

    compile ('com.github.LuckSiege.PictureSelector:picture_library:v2.2.0') {

            exclude group: 'com.github.LuckSiege.PictureSelector', module: 'ucrop'

            exclude group: 'com.github.bumptech.glide'

        }

    exclude就是排除的意思。

    这么操作之后就会发现项目依赖的是自己引入的3.7的glide了。

    五十五:当依赖有冲突时,强制统一依赖,在configurations.all 加入以下即可

    // 统一使用glide3.7.0

        resolutionStrategy {

            force 'com.github.bumptech.glide:glide:3.7.0'

        }

    五十六:当react-native-syan-image-picker改为glide3.7后,图片功能失败,因此

    compile ('com.github.LuckSiege.PictureSelector:picture_library:v2.0.6') {

            exclude group: 'com.github.LuckSiege.PictureSelector', module: 'ucrop'

        }

    v2.0.6中,glide为3.7.0

    五十七:调试过程中,很多方法会失效,可以关闭debug来解决

    关闭chrome debugger

    五十八:import中路径名后面的名字是文件名

    五十九:匿名方法拿参数时,需要在匿名中添加参数;传参数时,匿名方法中的方法给参数值

    六十:设置小红点(react-natvie-navigation)

    badge: ' ', // 设置空字符串就是小红点

    badgeColor: 'red',

    六十一:文件上传时,boundary设置出问题,导致无法发送成功

    https://segmentfault.com/a/1190000010205162

    六十二:state方法

    state更新无效,将setState方法重写一下就好了

    六十三:required cycle (依赖库中)的解决办法是直接忽略

    因为并不是真出现了循环引用(我们在使用中,没有循环引用),因此如下解决方法

    YellowBox.ignoreWarnings(['Warning:', 'Possible', 'Debugger', 'http', 'cycle']);

    六十四:react-native中报错:make sure to start component names with a capital letter

    在JSX中,小写标记名称被认为是HTML标记。但是,带点(属性访问器)的小写标签名称不是。

    请参阅HTML标记与React组件。

    <component />编译成React.createElement('component')(html标签)

    <Component /> 编译成 React.createElement(Component)

    <obj.component /> 编译成 React.createElement(obj.component)

    六十五:特别重要的基础类库(image、text、page等)

    react-native-element

    https://tech.meituan.com/2018/09/27/waimai-beeshell-popularize.html

    六十六:react-native错误“line:24049,column:31,sourceURL:http//localhost:8081/index.delta?...”

    解决办法:https://github.com/facebook/react-native/issues/10404

    实际是没网络的原因

    六十七:android studio出现scanning files to index的解决办法

    https://blog.csdn.net/weixin_41647586/article/details/89929472

    六十八:react-native组件库

    https://www.jianshu.com/p/18fd4b438958

    六十九:ip不通、或者无网络时,错误请求处理(line:139 column 2655 sourceURL:index.android.bundle)

    七十:react-native link 的意思是:link所有依赖库

    七十一:拍照图片已损坏是我查找答案时,有些答案不屑于看,实际这才是真正的能解决问题的答案(引以为戒)

    需要动态获取文件存储权限

    七十二:FastImage图片未读取出来原来是无网络的原因,并不是库的问题

    七十三:Android依赖导入全攻略

    https://juejin.im/post/5acd6daaf265da238a30ca73

    七十四:图片上传小逻辑

    https://www.jianshu.com/p/1ecf892a0069

    七十五:导入旧项目后报错:Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory)...

    https://www.jianshu.com/p/f7a7a8765294

    // 谷歌googlePlayGCM版本升级,导致项目本身未兼容androidx而出错,现在将googlePlayGCM的版本降下来,来解决这个问题(googlePlayServicesVersion = '8.3.0')

    七十六:报错com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:

    实际上是安卓API:28/29之间的冲突,当依赖未写版本,而是依赖到更新版本是(以+结尾),当最新版本所依赖的库更新到与本项目库冲突时,解决方法可依据依赖冲突解决方案

    七十七:ReactNative——react-native-video实现视频全屏播放

    https://juejin.im/post/5a9f9fde518825557207e7b0

    七十八:拍摄视频(openVideo()方法中)

    .openCamera(PictureMimeType.ofVideo())

    改为:

    .openGallery(PictureMimeType.ofVideo())

    并在react-native-syan-image-picker中的index.js中添加:

    openVideo(options, callback) {

            const optionObj = {

                ...defaultOptions,

                isCamera: false,

                allowPickingGif: false,

                allowPickingVideo: true,

                allowPickingGif: true,

                allowPickingImage: false,

                allowPickingMultipleVideo: true,

                videoMaximumDuration: 20,

                MaxSecond: 60,

                MinSecond: 0,

                recordVideoSecond: 60,

                videoCount: 1,

                ...options

            };

            return RNSyanImagePicker.openVideo(optionObj, callback)

        }

    七十九:开发环境和调试环境中,功能会不一样哦,因此有些问题并不是代码的问题。(例如:拍摄视频后,不显示刚保存的视频问题)

    八十:Attempted to transition from state `RESPONDER_INACTIVE_PRESS_IN` to `RESPONDER_ACTIVE_LONG_PRESS_IN`

    关闭调试模式即可

    八十一:无法remote chrome

    晃动手机弹出菜单,点击DEV Settings ->Debug server host&port for device 配置电脑的ip:8081

    八十二:React DevTools不会自动连接到RN

    看到这种情况发生了几次。刷新模拟器始终修复它。

    八十三:Attempted to transition from state `RESPONDER_INACTIVE_PRESS_IN` to `RESPONDER_ACTIVE_LONG_PRESS_IN`, which is not supported. This is most likely due to `Touchable.longPressDelayTimeout` not being cancelled.

    是手机设备和电脑设备的时间不对应导致,改为电脑早一分钟就好。

    八十四:Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null,这是因为代码中return同一行没有代码

    render(){

        return

        (

          <div>

            <p>App test</p>

          </div>)

      }改为

    render(){

        return (

          <div>

            <p>App test</p>

          </div>)

      }

    后正常

    八十五:优化Android系统设置大号字体后布局错乱的问题

    https://blog.csdn.net/z191726501/article/details/47704137

    八十六:failed to connect to ... (构建下载失败)

    const options = {

      fromUrl: formUrl,

      toFile: downloadDest,

      background: true,

      // progressDivider: 5,

      // connectionTimeout: 5, 这个连接超时导致构建下载失败

      begin: (res) => {

        //开始下载时回调

        console.log('begin', res);

      },

      progress: (res) => {

        //下载过程中回调,根据options中设置progressDivider:5,则在完成5%,10%,15%,...,100%时分别回调一次,共回调20次。

        console.log('progress', res)

      }

    }

    八十七:封装网络请求时,不能用module.exports,而必须包含在class里(不一定,有时候可以再module中,交替使用就好,这是react-native的通病)

    八十八:npm start -- --reset-cache启动不了的时候,应该把react-native中的主项目中,build文件夹下的文件全部清空,或者clean一下项目

    八十九:HTTP 413 错误 – 请求实体太大 (Request entity too large)

    https://www.checkupdown.com/status/E413_zh.html

    九十:

    相关文章

      网友评论

          本文标题:react-native开发笔记

          本文链接:https://www.haomeiwen.com/subject/veexkftx.html