React Native 踩坑日记(十二) —— 数组的复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React Native 踩坑日记(十二) —— 数组的复制相关的知识,希望对你有一定的参考价值。

参考技术A 数组的复制,其实在 OC 中也有,或者说每种语言应该都有涉及。概念上叫做 深拷贝 和 浅拷贝
没有什么特别新鲜的点,只是很容易出错。

这里举一个实例来说明容易出错的应用场景

我们通常使用 Flatlist 的时候,会将数据源 dataSource 的数组放在 state 中去,便于在下拉刷新,上拉加载的时候,通过 setState 修改这个 state 中的数据,达到刷新页面的效果。

当我们通过点击或下拉刷新修改了里头的数据时,就需要用到以下的场景:

这样写是无法激活重新 render 的。因为 let tempArray = this.state.dataSource; 拷贝的只是指针,当你做 push 的时候,已经改变了 this.state.dataSource 的值,再去 setState ,在 pureComponent 中,比对数据后觉得你没有改变什么,不会触发刷新的。

正确的做法:

看似是已经将数组复制出来了,但是去打断点会发现, tempArray[index] = newData; 这句执行后, this.state.dataSource 里头对应的那个 index 的值又改动了。
道理其实很简单,数组的指针虽然不同了,但是里头元素的指针还是和原先的一样。拷贝还不够深入

正确的做法:

tempArray[index] = ...this.state.dataSource[index],newData; , 等号右边用到了解构赋值。 newData 会将 展开的 ...this.state.dataSource[index] 中搜索对应的值,并替换掉。

React-Native 真机调试踩坑指南

继上一篇基础安装踩坑继续我们的踩坑之旅,备注一下以下仅针对Mac环境~~

安卓

1、adb 找不到命令?
Adb的全称为Android Debug Bridge,就是起到调试桥的作用,真机调试安卓必备的工具。
做RN开发一般都会安装android studio,在安装之初会有一个android-platform-tools选项,这个就是adb用到的东西了。安装android studio之后,一般情况下配置一个bash_profile,把相关的环境变量配置以下就好了。

cd ~
touch .bash_profile

新建文件后在文件中添加如下配置

# 如果不是用Android Studio安装的sdk,则其路径可能不同
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/emulator

2、.bash_profile都配好了还没起作用,什么情况?
配置好之后没起作用,可能是因为你没有更新配置,导致配置没生效,用source命令更新以下就好了

source ./.bash_profile

IOS

1、使用dp单位后,ios大屏机屏幕中出现一个半透明的白色条块?
这个我也叫它“幽灵白块”,他的出现是由于当前dom设置了左上和右上的圆角,且圆角半径较小,并且目前只在ios np系列上发现了。
解决办法也有点奇葩。。。调大一点圆角半径就好了,具体原因一直没找到。

碰到了在更新上来,持续更新贴~需求请关注~
大家还有别的话,欢迎补充~~

以上是关于React Native 踩坑日记(十二) —— 数组的复制的主要内容,如果未能解决你的问题,请参考以下文章

React Native 环境搭建踩坑

react native新建项目踩坑记录

react native ScrollableTabView日记

React – Native 踩坑记

react-native 踩坑记

react-native 踩坑记