MCPcopy
hub / github.com/hmjz100/LinkSwift / findReact

Function findReact

(改)网盘直链下载助手.user.js:1884–1910  ·  view source on GitHub ↗

* 查找 React 组件实例 * @author 油小猴 * @description 支持 Fiber 架构遍历,可指定向上查找层级 * @param {HTMLElement} dom - 起始 DOM 元素 * @param {Number} [traverseUp=0] - 向上遍历层级 * @returns {Object|null} React 组件实例或 `null`

(dom, traverseUp = 0)

Source from the content-addressed store, hash-verified

1882 * @returns {Object|null} React 组件实例或 `null`
1883 */
1884 findReact(dom, traverseUp = 0) {
1885 let key = Object.keys(dom).find(key => {
1886 return key.startsWith("__reactFiber$")
1887 || key.startsWith("__reactInternalInstance$");
1888 });
1889 let domFiber = dom[key];
1890 if (domFiber == null) return null;
1891 if (domFiber._currentElement) {
1892 let compFiber = domFiber._currentElement._owner;
1893 for (let i = 0; i < traverseUp; i++) {
1894 compFiber = compFiber._currentElement._owner;
1895 }
1896 return compFiber._instance;
1897 }
1898 let GetCompFiber = fiber => {
1899 let parentFiber = fiber.return;
1900 while (base.isType(parentFiber.type) == "string") {
1901 parentFiber = parentFiber.return;
1902 }
1903 return parentFiber;
1904 };
1905 let compFiber = GetCompFiber(domFiber);
1906 for (let i = 0; i < traverseUp; i++) {
1907 compFiber = GetCompFiber(compFiber);
1908 }
1909 return compFiber.stateNode || compFiber;
1910 },
1911
1912 /**
1913 * 深拷贝

Callers

nothing calls this directly

Calls 1

GetCompFiberFunction · 0.85

Tested by

no test coverage detected