revenge-bundle-next/lib/utils/src/react.ts

31 lines
700 B
TypeScript
Raw Normal View History

import { useEffect, useReducer } from 'react'
import { findInTree } from './tree'
2025-09-17 16:56:10 +07:00
import type { ReactElement } from 'react'
import type { SearchFilter } from './tree'
export function useIsFirstRender() {
let firstRender = false
useEffect(() => {
firstRender = true
}, [])
return firstRender
}
export function useReRender() {
const [, forceUpdate] = useReducer(x => ~x, 0)
2025-05-09 00:04:36 +07:00
return forceUpdate
}
const ReactFiberWalkable = new Set(['props', 'children', 'child', 'sibling'])
export function findInReactFiber<F extends SearchFilter>(
2025-09-17 16:56:10 +07:00
fiber: ReactElement,
filter: F,
) {
2025-07-11 01:15:50 +07:00
return findInTree<F>(fiber, filter, {
walkable: ReactFiberWalkable,
})
}