跳至主要内容

useGetRecoilValueInfo_UNSTABLE()

此钩子允许组件“查看”atom 或 selector 的当前状态、值和其他信息。这类似于Snapshotatom 效应 中的 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>,并将返回一个包含有关该 atom/selector 的当前信息的 object。它不会导致任何状态更改或创建任何订阅。它主要用于调试或开发工具。

调试信息正在不断发展,但可能包括

  • loadable - 带有当前状态的 Loadable。与 getLoadable() 等方法不同,此方法不会以任何方式更改快照。它提供当前状态,不会初始化新的 atom/selector,执行任何新的 selector 评估,或更新任何依赖项或订阅。
  • isSet - 如果这是一个在快照状态中存储了显式值的 atom,则为 True。如果这是一个 selector 或使用默认的 atom 状态,则为 False。
  • isModified - 如果这是一个自上次事务以来被修改过的 atom,则为 True。
  • type - atomselector
  • deps - 此节点所依赖的 atom 或 selector 的迭代器。
  • 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>;
}