useGetRecoilValueInfo_UNSTABLE()
此钩子允许组件“查看”atom 或 selector 的当前状态、值和其他信息。这类似于Snapshot
和 atom 效应 中的 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
-atom
或selector
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>;
}