mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-20 16:57:46 +00:00
Fix flicker in iterm2 (#266)
This commit is contained in:
36
packages/cli/src/ui/hooks/useStateAndRef.ts
Normal file
36
packages/cli/src/ui/hooks/useStateAndRef.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* @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;
|
||||
};
|
||||
Reference in New Issue
Block a user