Files
TrueGrowth/packages/react-text/src/search-highlight.ts

28 lines
707 B
TypeScript

import { useSyncExternalStore } from 'react';
let searchQuery = '';
const listeners = new Set<() => void>();
function subscribe(listener: () => void) {
listeners.add(listener);
return () => {
listeners.delete(listener);
};
}
function getSnapshot() {
return searchQuery;
}
/** 设置搜索高亮关键词(供搜索组件调用) */
export function setSearchHighlightQuery(query: string) {
if (searchQuery === query) return;
searchQuery = query;
listeners.forEach((listener) => listener());
}
/** 订阅搜索高亮关键词(供 Text 组件内部使用) */
export function useSearchHighlightQuery(): string {
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
}