stream-chat-react
Version:
React components to create chat conversations or livestream style chat
26 lines (25 loc) • 1.57 kB
TypeScript
export type StableCallback<A extends unknown[], R> = (...args: A) => R;
/**
* A utility hook implementing a stable callback. It takes in an unstable method that
* is supposed to be invoked somewhere deeper in the DOM tree without making it
* change its reference every time the parent component rerenders. It will also return
* the value of the callback if it does return one.
* A common use-case would be having a function whose invocation depends on state
* somewhere high up in the DOM tree and wanting to use the same function deeper
* down, for example in a leaf node and simply using useCallback results in
* cascading dependency hell. If we wrap it in useStableCallback, we would be able
* to:
* - Use the same function as a dependency of another hook (since it is stable)
* - Still invoke it and get the latest state
*
* **Caveats:**
* - Never wrap a function that is supposed to return a React.ReactElement in
* useStableCallback, since React will not know that the DOM needs to be updated
* whenever the callback value changes (for example, renderItem from FlatList must
* never be wrapped in this hook)
* - Always prefer using a standard useCallback/stable function wherever possible
* (the purpose of useStableCallback is to bridge the gap between top level contexts
* and cascading rereders in downstream components - **not** as an escape hatch)
* @param callback - the callback we want to stabilize
*/
export declare const useStableCallback: <A extends unknown[], R>(callback: StableCallback<A, R>) => StableCallback<A, R>;