- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在与用户一起处理一个项目。现在我正在使用 UserProfile
这是我收到的错误。
React has detected a change in the order of Hooks called by UserProfile
Previous render Next render
------------------------------------------------------
1. useState useState
2. useContext useContext
3. useEffect useEffect
4. undefined useContext
让我展示一些 UserProfile
组件的代码。
export const UserProfile = () => {
document.title = `${title} - My Profile`;
const [profile, setProfile] = useState<UserDetails>();
const {claims} = useContext(AuthContext);
const getUserEmail = (): string => {
return claims.filter(x => x.name === "email")[0]?.value.toString();
}
useEffect(() => {
axios.get(`${urlAuth}?userName=${getUserEmail()}`)
.then((response: AxiosResponse<UserDetails>) => {
setProfile(response.data);
})
}, [getUserEmail]);
return (
profile ?
<article>
<h1>This profile belongs to {UserName()}</h1>
<h2>{profile.name}</h2>
</article>
: <div>Loading...</div>
)
}
我在 getUserEmail
函数中收到警告,
它说
The 'getUserEmail' function makes the dependencies of useEffect Hook (at line 26) change on every render.
Move it inside the useEffect callback.
Alternatively, wrap the definition of 'getUserEmail' in its own useCallback() Hook.
我不确定应该如何完成。关于我可以做什么的任何想法?
谢谢
最佳答案
将 getUserEmail 的值包装在 useCallback
中。在每次渲染时,getUserEmail 基本上变成了一个"new"函数。
当 useEffect 或其他类似钩子(Hook)的 deps 数组中有函数时,React 通过引用检查它。由于每个组件函数执行/重新渲染都会导致创建一个新函数,因此您的 useEffect Hook 实际上每次都会运行,将您送入重新渲染循环(因为它将运行 useEffect,使用 setProfile 更新状态,这反过来将触发另一次执行,其中 getUserEmail 再次不同,导致 useEffect 再次运行,依此类推。
const getUserEmail = useCallback((): string => {
return claims.filter(x => x.name === "email")[0]?.value.toString();
}, [claims]);
这应该会给你一个内存回调,只有在声明发生变化时才会重新创建。由于声明来自您的上下文,因此作为依赖项应该是安全的。
关于reactjs - React with TypeScript - React 检测到 ComponentName 调用的 Hooks 的顺序发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72153721/
我正在为这个问题挠头,不知道该怎么做。在我开始 Activity 后,我收到了 NullPointerException 的报告,但并非一直如此。知道会发生什么吗? 这是 Google 报告的堆栈跟踪
当您创建空的Svelte组件(例如ComponentName.svelte)时,如下所示: export let segment; Lorem ipsum lorem ip
来自 Pro Android 2 书籍:“ComponentName 将 package 名称和 class 名称包装在一起。例如...” Intent intent = new Intent();
我正在像这样从服务更新小部件(服务和小部件类在两个不同的包中) AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);
我如何在助手内部调用与 Handlebars 助手 {{component 'componentName' model=model}} 等效的助手,以根据以编程方式更改的 componentName
我有一个调用另一个应用程序的小部件,这是代码中最重要的部分: final Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.ad
我有这行代码,我在这里得到一个 NullPointerException 第219行Search.java Intent intent = new Intent((Context) actionBar
我有一个前台屏幕 Activity 的 ComponentName。我能够从中获取上下文对象。但我需要 Activity 实例。如何从 ComponentName 获取 Activity 引用。所有这
我对 Android 中的 ComponentName 类有点困惑。 获取组件名称对象的方法有很多种,但我不知道何时使用哪个...以及为什么! 例子: 应用包为de.zordid.sampleapp
正如标题所示,我收到错误 - vue.js:634 [Vue warn]: Unknown custom element: - 你是否正确注册了组件? 我猜这是一个愚蠢的错字,我查了一下,但找不到它。
我有一个功能,我只想在满足某些条件时才可用,因此我有此 Activity 别名:
我需要 Android.Content.ComponentName 的构造函数中的 Java 类名称,因为 Xamarin 没有像它那样采用 typeof(ClrType) 的重载构造函数对于其他一些
不知道为什么会报错 compiler.js:2175 Uncaught Error: Can't resolve all parameters for ClauseListComponent: ([o
我想用我的应用禁用我的相机 我发现有一个函数 setCameraDisabled (ComponentName admin, boolean disabled); 但是我不知道怎么用 什么是“Comp
我想从我的应用程序小部件启动不同的应用程序。这个小部件是一个项目列表,点击一个项目应该会打开一个应用程序,比如 Google Plus。按下列表中的项目时没有任何反应。当我删除 setData 和 s
我正在与用户一起处理一个项目。现在我正在使用 UserProfile 这是我收到的错误。 React has detected a change in the order of Hooks calle
我正在与用户一起处理一个项目。现在我正在使用 UserProfile 这是我收到的错误。 React has detected a change in the order of Hooks calle
在 Android Q / Android 10使用 USES_POLICY_DISABLE_KEYGUARD_FEATURES的keyguard_features导致安全异常。 devicePoli
我有几个用 VueJS 编写的项目。我希望能够使用 CMD/CTRL + 左键单击该元素,从 HTML 模板元素导航到它的 component.vue 文件。 我的观察是,当项目变大时,到组件的导航停
我是一名优秀的程序员,十分优秀!