【发布时间】:2022-01-10 04:04:42
【问题描述】:
如何在子组件内部访问父组件中调用的查询数据,而无需进行道具钻探。
例如,如果在 parent.js 中我调用 getPost 查询
const {data} = useGetPostQuery();
那么我怎样才能在层次结构中访问这些数据呢?
【问题讨论】:
标签: reactjs redux react-redux redux-toolkit rtk-query
如何在子组件内部访问父组件中调用的查询数据,而无需进行道具钻探。
例如,如果在 parent.js 中我调用 getPost 查询
const {data} = useGetPostQuery();
那么我怎样才能在层次结构中访问这些数据呢?
【问题讨论】:
标签: reactjs redux react-redux redux-toolkit rtk-query
【讨论】:
我看到了两个选项:
posts API 切片定义。因此,我们将能够使用 rtk-q 提供的选择器直接访问某些特定的缓存帖子:.
const selectPost = posts.endpoints.getPost.select(postId);
selectPost - 是一个记忆选择器,由 rtk-q 生成特定的postId。要获取数据 - 您需要传入应用程序状态,它将从缓存中返回预期的帖子,即您的父组件之前获取的内容。
在组件内部,它可以与useSelector 一起使用,例如:
const { data: post } = useSelector(posts.endpoints.getPost.select(postId));
这里有更多细节: https://redux.js.org/tutorials/essentials/part-8-rtk-query-advanced#selecting-users-data
我更喜欢这种方法,而且我觉得它使代码更加一致 - 我只是在组件中声明“我需要该数据”,并且不在乎它是否之前被提取,保持所有组件与了解任何其他组件分离,使其具有凝聚力。
Offtopic 奖励:如果您不需要父组件上的 post 数据并且只想获取它以提高响应能力 - 您可以使用 usePrefetch 挂钩。例如 - 在“编辑”按钮悬停时,它将进行 API 调用,将数据放入缓存中,因此post 将立即可供孩子使用。
更多: https://redux-toolkit.js.org/rtk-query/usage/prefetching
【讨论】:
通过 props 将数据从 parent 发送到 child 的最简单方法,但如果您想在没有 props 的情况下执行此操作,您应该使用其他策略,例如:localStorage、cockies 或 redux。
【讨论】: