0%

Immutable优缺点

  • 传递数据时,Immutable Data可以提升组件渲染性能
  • Imutable Data是对可变对象和不可变对象的一个折中
  • 可变对象——是指多个变量引用一个对象,这导致对象的time和value耦合,对象一旦改变无法重塑
  • 不可变对象——是指每次用对一个对象就进行深复制,这导致内存浪费
  • Immutable——基于持久化数据结构,也就是使用就数据创建新数据时,旧数据依旧保存,而且为了避免深度复制,Immutable Data使用结果共享,也就是说如果对象树中的一个节点变化,只修改这个节点和受他影响的父节点,其他节点依旧共享。Immutable Data优点体现在降低了可变数据带来的时间和值的耦合,节省了内存,可以实现数据的时间旅行,也就是说数据可以重塑。

Immutable

  • 普通的mutable对象深拷贝会将一整份数据都复制一遍,而Immutable对象在修改数据时并不会复制一整份数据,而是将变化的节点与未变化的节点的父子关系转移到一个新节点商,类似于链表的结构。从“复制”的角度来看,做到了最小化的复制,未变化的部分是共享的,Mutable在复制的时候是“全量”,而Immutable复制的是“增量”,对于内存空间的使用率

Here's something encrypted, password is required to continue reading.
Read more »

React-Native(后面简称RN)在展示某些静态也页面的时候,可能需要使用WebView, WebView可以请求一个网页地址,也可以异步请求HTML文本。一般情况下我们要得到网页的宽高,传回给RN以便准确设置WebView展示宽高

大致步骤

  1. 使用WebView的injectedJavaScript 属性注入JS代码,进行测量网页的宽高
  2. 设置WebView的宽高

PS:是不是很简单?哈哈哈~

先来介绍下injectedJavaScript

The injectedJavaScript is a custom prop of the React native Webview component. You can pass any JavaScript code ( as string ) to this prop, and React native will inject this JavaScript code into the Webview. The injected JavaScript will get executed once the Webview is finished loading.转自(可能需要科学上网)

injectedJavaScript 属性让注入的代码在WebView loaded时候运行一次,并只运行一次,除非你重新加载一次webView。

Read more »

1、设置UILabel行间距

1
2
3
4
5
6
7
NSMutableAttributedString* attrString = [[NSMutableAttributedString  alloc] initWithString:label.text];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:20];
[attrString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, label.text.length)];
label.attributedText = attrString;


或者使用xib,看下gif图

2、当使用-performSelector:withObject:withObject:afterDelay:方法时,需要传入多参数问题

Read more »

1、禁止手机睡眠

1
2
3

[UIApplication sharedApplication].idleTimerDisabled = YES;

2、隐藏某行cell

1
2
3
4
5
6
7
8
9
10
11
12
13

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 如果是你需要隐藏的那一行,返回高度为0
if(indexPath.row == YouWantToHideRow)
return 0;
return 44;
}

// 然后再你需要隐藏cell的时候调用
[self.tableView beginUpdates];
[self.tableView endUpdates];

Read more »

在开发 ReactNative 应用时,jsbundle 有两种加载方式。第一种是指定 url 通过网络进行加载;第二种是 pre-bundled 将 jsbundle 文件打包进 app 安装包中。
编译生成的安装包有 Debug 和 Release 两种模式,在 Debug 模式下默认是使用第一种方式加载 jsbundle,在 Release 模式下默认是使用第二种方式。

最原始的办法(不推荐)

初始化后的项目想要真机调试,只好去修改:Libraries–>RCTWebSocket.codeproj–>RCTWebSocketExecutor.m中的localhost,将它修改为本地服务器的IP(通过终端ifconfig命令查看)

该方法太麻烦,一不小心把自己的IP提交上去了,会与其他同事产生冲突


自动配置 serverIP 的方案

Read more »

Node.js使用path模块处理文件路径

处理文件一般都要涉及到对文件路径的处理,Node.js处理文件路径使用path模块。path模块可以帮你规范化连接和解析路径,还可以用于绝对路径到对路径的转换、提取路径的组成部分及判断路径是否存在等。

文件路径指文件的保存位置,可以分为相对路径和绝对路径。可以通过拼接文件路径检测文件是否存在,也可以访问文件信息。通过字符串来连接文件路径时会存在一些文件。如:有的部分需要带“/”,有的部分不需要,不同操作系统的路径分隔也不一样。因此,处理文件路径会比较困难,使用path模块可以很好的解决这些问题。path模块提供的功能有:

  1. 规范化路径
  2. 连接路径
  3. 路径解析
  4. 查找两个绝对路径的相对关系
  5. 提取路径的组成部分
Read more »

iOS原生与React-Native通信(不依赖于视图控件)

最近在写RN项目的时候遇到一个问题:当接收到后台推送的消息或者其他应用跳转过来,需要打开APP并跳转到指定页面。

分析

这个对于iOS原来来说比较方便。一个全部React-Native(本文称为RN)实现的APP,RN对于iOS原生来说就是一个RCTRootView控制器。原生无法直接跳转RN的内部的控制器。必须要由iOS原生去通知RN并将参数传递给RN,由RN来进行跳转。

下面大致捋一下思路:

  • 新建RCTBridgeModule的Module类
  • 发通知告诉Module类与RN进行通信
  • RN在合适的位置监听Module类中的方法,接收到原生信息后进行响应操作
Read more »