javascript - 如何在钩子中调用钩子?(或替代方案,因为这不能完成:D)
问题描述
所以我创建了一个需要在页面视图上触发的自定义钩子
所以我想我可以在里面调用这个钩子,useEffect
但看起来这不可能
那么有人知道我该怎么做吗?
一旦我触发它,它将触发谷歌分析,因此它必须处于加载状态。这可能吗?
好的,这是一个例子
export const usePageView = props => {
const counter = useSelector(state => state) // useSelector coming from react redux
console.log(counter, '===')
}
import { usePageView } from '../myhooks'
export const myComponent = () => {
useEffect(() => {
usePageView() // get error saying Error: Invalid hook call.
},[])
}
解决方案
钩子规则规定只从函数的顶层调用钩子。
不要在循环、条件或嵌套函数中调用 Hook。相反,请始终在 React 函数的顶层使用 Hooks。通过遵循此规则,您可以确保每次组件呈现时都以相同的顺序调用 Hook。这就是允许 React 在多个 useState 和 useEffect 调用之间正确保留 Hooks 状态的原因。
您不能将自定义挂钩组合到useEffect
调用中,因为根据定义,这是一个“嵌套函数”。相反,您应该构建您的自定义钩子以包含useEffect
它们需要在自定义钩子内执行的所有钩子或调用(但在自定义钩子的顶层)。
https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level
拥有更具体的代码来说明您正在尝试做什么会很有帮助,因为目前您的问题太模糊而无法给出更直接的答案。
推荐阅读
- grails - 如果 grails 前面有多个大写字母,如何在一个类中自动装配一个服务(2.5.6)
- angular - 如何增加 Shadow DOM 的特异性
- python - Pandas Seaborn FacetGrid 在每个图上都有相同的 x 标签,但 y 值不同
- html - 社交媒体图标未正确呈现
- php - 反序列化对应于父实体引用的 JSON 键 (Symfony Serializer)
- reactjs - 浏览器上的 React 服务器不会自动刷新
- notepad++ - 如何通过记事本++将第一行复制到文本文件中的每一行
- sql - 从 SQL 服务器到 PostgreSQL 的 T-SQL 存储过程
- symfony - 在 Heroku 上部署 Symfony
- flutter - 每次我打开预览屏幕或返回预览屏幕时,其中的图像需要 1-2 秒才能再次加载图像