in src/hooks/useQuickReplies.ts [6:41]
export default function useQuickReplies(initialState: QuickReplies = []) {
const [quickReplies, setQuickReplies] = useState(initialState);
const [visible, setVisible] = useState(true);
const savedRef = useRef<QuickReplies>();
const stashRef = useRef<QuickReplies>();
useEffect(() => {
savedRef.current = quickReplies;
}, [quickReplies]);
const prepend = (list: QuickReplies) => {
setQuickReplies((prev) => [...list, ...prev]);
};
// prepend、replace 后立即 save 只会保存上一个状态
// 因为 savedRef.current 的更新优先级最后,用 setTimeout 可解
const save = () => {
stashRef.current = savedRef.current;
};
const pop = () => {
if (stashRef.current) {
setQuickReplies(stashRef.current);
}
};
return {
quickReplies,
prepend,
replace: setQuickReplies,
visible,
setVisible,
save,
pop,
};
}