创建节点
节点是 EasyReact 的基本部件,也是最重要的部件之一,虽然上层框架和其他的支持库中可能都直接以返回值的形式提供了节点,但是自己创建节点总是需要的。
创建不变节点
创建不变的节点有两种方式,一种是给出初始值,另一种是直接 new 出来。像这样:
EZRNode *nodeA = [EZRNode value:@15]; // <- 以初始值创建
EZRNode *nodeB = [EZRNode new]; // <- 直接创建,初始值为 EZREmpty.empty
EZRNode<NSNumber *> *nodeC = [EZRNode value:@33]; // <- 创建带 NSNumber 泛型的节点
创建可变节点
EZRNode 代表了不可变的节点,而更多的时候,我们需要可变的节点。创建可变的节点方法是和不可变节点一样的:
EZRMutableNode *nodeA = [EZRMutableNode value:@15]; // <- 以初始值创建
EZRMutableNode *nodeB = [EZRMutableNode new]; // <- 直接创建,初始值为 EZREmpty.empty
EZRMutableNode<NSNumber *> *nodeC = [EZRMutableNode value:@33]; // <- 创建带 NSNumber 泛型的可变节点
我们也可以将一个不可变节点变为可变节点,像这样:
EZRNode<NSNumber *> *nodeC = [EZRNode value:@33];
EZRMutableNode<NSNumber *> *mutableNodeC = nodeC.mutablify;
改变节点的不可变性并不会返回新的实例,所以 mutableNodeC 和 nodeC 的地址是相同的。而且变换是单向的,我们也无法将可变节点重新变为不要可变的,请大家注意。
我们可以通过BOOL mutable
属性来判断一个节点是可变还是不可变的,它的别名是isMutable
,像这样:
EZRNode<NSNumber *> *nodeC = [EZRNode value:@33];
BOOL mutable = nodeC.mutable; // <- NO
EZRMutableNode<NSNumber *> *mutableNodeC = nodeC.mutablify;
mutable = [nodeC isMutable]; // <- YES
mutable = [mutableNodeC isMutable]; // <- YES