跳到主要內容

useGetRecoilValueInfo_UNSTABLE()

此掛勾允許元件「查看」當前的狀態、值以及關於原子或選擇器的其他資訊。這類似於 快照原子影響 中的 getInfo_UNSTABLE() 方法。

function useGetRecoilValueInfo_UNSTABLE(): RecoilValue<T> => RecoilValueInfo<T>;

interface RecoilValueInfo<T> {
loadable?: Loadable<T>;
isActive: boolean;
isSet: boolean;
isModified: boolean; // TODO report modified selectors
type: 'atom' | 'selector';
deps: Iterable<RecoilValue<T>>;
subscribers: {
nodes: Iterable<RecoilValue<T>>,
components: Iterable<ComponentInfo>,
};
}

interface ComponentInfo {
name: string;
}

它提供一個函數,此函數可傳遞 RecoilValue<T>,並且會傳回一個物件,其中包含關於那個原子/選擇器的當前資訊。它不會導致任何狀態變更或建立任何訂閱項目。它主要供用於偵錯或開發人員工具。

偵錯資訊正在進化中,但是可能包括

  • 可載入 - 具有當前狀態的 Loadable。與 getLoadable() 等方法不同,此方法完全不會變更快照。它提供當前的狀態,並且不會初始化新的原子/選擇器、執行任何新的選擇器評估,或更新任何依賴項或訂閱項目。
  • 已設定 - 如果這是一個在快照狀態中儲存明確值的原子,則為 True。如果這是一個選擇器或使用預設原子狀態,則為 False。
  • isModified - 如果這是一個自上次交易以來已修改的原子,則為 True。
  • type - atomselector
  • deps - 這個節點依賴的原子或選擇器的迭代器。
  • subscribers - 有關什麼正在為這個快照訂閱這個節點的資訊。詳細內容正在開發中。

範例

function ButtonToShowCurrentSubscriptions() {
const getRecoilValueInfo = useGetRecoilValueInfo_UNSTABLE();
function onClick() {
const {subscribers} = getRecoilValueInfo(myAtom);
console.debug(
'Current Subscriber Nodes:',
Array.from(subscribers.nodes).map(({key}) => key),
);
}

return <button onClick={onClick} >See Current Subscribers</button>;
}