javascript - React Next.js 未在生产应用程序中调用 useEffect 挂钩
问题描述
我有一个相当大的 Next.js/React 应用程序。几天前,一些之前完美运行的页面开始出现奇怪的行为——更具体地说,useEffect
钩子内的一些 Axios 请求根本停止发送。
更多细节:
这是导致错误的文件:
export const AuthContext = createContext();
export function AuthProvider({ children }) {
const [auth, setAuth] = useState(null);
useEffect(async () => {
const { data: result } = await axiosApp.get("/auth-status"); // axiosApp = same thing as axios
setAuth(result);
}, []);
return !auth ? (
<div className="pretend-this-is-a-progress-bar"></div>
) : (
<AuthContext.Provider value={[auth, setAuth]}>{children}</AuthContext.Provider>
);
}
如您所见,我在此处使用反应上下文进行我的应用程序中的身份验证。这里的这个组件位于_app.js
文件中,不同的 next.js 页面作为<ContextProvider/>
.
你也可以看到,这个文件向auth-staus
它的useEffect
钩子发送一个请求,它告诉应用程序用户是否登录。问题是,我发现这仅发生在具有getServerSideProps
功能的页面中,并且仅在使用生产构建的生产中发生,根本不发送此请求。最终发生的是最终导致页面为用户无限加载的auth
状态。null
为什么会发生这种情况,我能做些什么来解决这个错误?
PS:我很乐意提供您回答此问题所需的任何其他信息 编辑:我知道该请求未发送,因为它没有出现在控制台的网络选项卡中
解决方案
不建议useEffect
像@Dimitri 说的那样在回调中使用异步。尝试这样的事情。
export const AuthContext = createContext();
export function AuthProvider({ children }) {
const [auth, setAuth] = useState(null);
useEffect(() => {
async function fetchAuthStatus() {
const { data: result } = await axiosApp.get("/auth-status"); // axiosApp = same thing as axios
setAuth(result);
}
fetchAuthStatus();
}, []);
return !auth ? (
<div className="pretend-this-is-a-progress-bar"></div>
) : (
<AuthContext.Provider value={[auth, setAuth]}>{children}</AuthContext.Provider>
);
}
推荐阅读
- c# - 如何在 C# 中返回命名元组?
- python - Django 中的链式选择 [模块:django-smart-selects]
- android-studio - 在 Android Studio 中调试时如何立即返回自定义值?
- html - CSS Flex,如何显示具有自定义顺序和水平滚动功能的列表
- javascript - 如何在 javascript 函数中从 smarty 模板发送数组作为参数
- jsf-2.2 - 带有 h:dataTable 的 JSF Facelet 无法识别
- php - 将多个文件放在后台作业或单个文件中更好吗?
- java - 在春季使用 JPA 更新查询?
- jenkins - Jenkins-pipeline:没有这样的 DSL 方法
- ios - 如何使用 dailymotion api 实现对 chromecast 的投射