メインコンテンツへスキップ

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 - 現在のステートを持つ Loadable。getLoadable() などのメソッドとは異なり、このメソッドはスナップショットを一切変更しません。現在のステートを提供し、新しいアトム/セレクターを初期化したり、新しいセレクタ評価を実行したり、依存関係やサブスクリプションを更新したりしません。
  • isSet - スナップショットステートに明示的な値が格納されたアトムである場合に true。セレクターであるか、デフォルトのアトムステートを使用する場合に false。
  • isModified - 前回のトランザクション以降に変更されたアトムである場合に true。
  • type - atom または selector
  • 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>;
}