-
Notifications
You must be signed in to change notification settings - Fork 48.4k
/
Copy pathReactNativeComponentTree.js
52 lines (42 loc) · 1.29 KB
/
ReactNativeComponentTree.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const instanceCache = new Map();
const instanceProps = new Map();
export function precacheFiberNode(hostInst, tag) {
instanceCache.set(tag, hostInst);
}
export function uncacheFiberNode(tag) {
instanceCache.delete(tag);
instanceProps.delete(tag);
}
function getInstanceFromTag(tag) {
return instanceCache.get(tag) || null;
}
function getTagFromInstance(inst) {
let nativeInstance = inst.stateNode;
let tag = nativeInstance._nativeTag;
if (tag === undefined && nativeInstance.canonical != null) {
// For compatibility with Fabric
tag = nativeInstance.canonical.nativeTag;
nativeInstance = nativeInstance.canonical.publicInstance;
}
if (!tag) {
throw new Error('All native instances should have a tag.');
}
return nativeInstance;
}
export {
getInstanceFromTag as getClosestInstanceFromNode,
getInstanceFromTag as getInstanceFromNode,
getTagFromInstance as getNodeFromInstance,
};
export function getFiberCurrentPropsFromNode(stateNode) {
return instanceProps.get(stateNode._nativeTag) || null;
}
export function updateFiberProps(tag, props) {
instanceProps.set(tag, props);
}