mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
37 lines
966 B
TypeScript
37 lines
966 B
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import React from 'react';
|
|
|
|
// Hook to return state, state setter, and ref to most up-to-date value of state.
|
|
// We need this in order to setState and reference the updated state multiple
|
|
// times in the same function.
|
|
export const useStateAndRef = <
|
|
// Everything but function.
|
|
T extends object | null | undefined | number | string,
|
|
>(
|
|
initialValue: T,
|
|
) => {
|
|
const [_, setState] = React.useState<T>(initialValue);
|
|
const ref = React.useRef<T>(initialValue);
|
|
|
|
const setStateInternal = React.useCallback<typeof setState>(
|
|
(newStateOrCallback) => {
|
|
let newValue: T;
|
|
if (typeof newStateOrCallback === 'function') {
|
|
newValue = newStateOrCallback(ref.current);
|
|
} else {
|
|
newValue = newStateOrCallback;
|
|
}
|
|
setState(newValue);
|
|
ref.current = newValue;
|
|
},
|
|
[],
|
|
);
|
|
|
|
return [ref, setStateInternal] as const;
|
|
};
|