javascript - Axios 实例不适用于 Nextjs:'Localstorage 未定义'
问题描述
我有一个反应应用程序。
我有一个要重用的 axios 组件:
import axios from 'axios'
import dynamic from 'next/dynamic'
const baseUrl = 'http://127.0.0.1:8000/'
const axiosInstance = axios.create({
baseURL: baseUrl,
timeout: 5000,
headers: {
Authorization: localStorage.getItem('access_token')
? 'Bearer ' + localStorage.getItem('access_token')
: null,
'Content-Type': 'application/json',
accept: 'application/json',
}
})
export default axiosInstance
现在,我尝试将其导入我的注册页面,如下所示:
import axiosInstance from "axiosInstance"
文件本身如下所示:
const handleFormSubmit = async (values: any) => {
axiosInstance.post(`account/register/`, {
username: values.username,
email: values.email,
password: values.password,
confirm_password: values.confirm_password,
}).then((response) => {
console.log(response);
});
// router.push('/profile')
console.log(values);
};
但是,这会引发错误:
有人可以帮我解决这个问题吗?我是 Nextjs 的新手,看了看
https://nextjs.org/docs/advanced-features/dynamic-import#with-no-ssr
但不确定如何在这种情况下使用它。
解决方案
localStorage
是window
对象的属性,并且由于 next.js 是服务器端渲染框架,当 next 在服务器上渲染组件时,window.localStorage
将是未定义的。
为了导入它,像这样设置 axios 实例:
const axiosInstance = axios.create({
baseURL: baseUrl,
timeout: 5000,
headers: {
// if localStorage is not defined, it wont throw error
Authorization:localStorage && localStorage.getItem('access_token')
? 'Bearer ' + localStorage.getItem('access_token')
: null,
'Content-Type': 'application/json',
accept: 'application/json',
}
})
然后在里面
推荐阅读
- reactjs - Formik FieldArray 是的错误验证不起作用
- python - 当我在 cmd 中导入不和谐而不是在 vs 代码中时,出现语法错误
- jenkins-pipeline - 如何调试以下 Jenkins 错误?
- amazon-web-services - AWS Cognito 和 Hasura - 在 cognito 中删除时从 hasura db 中删除用户
- c++ - 包装生成随机数的函数的最简单和最优雅的方法是什么?
- python - 将列表拆分为仅包含 1 的列表
- amazon-web-services - 在间隔时间安排任务 ECS Fargate
- python - Django - 无法将关键字解析为字段
- php - 合并 2 个具有一些重复值的多维数组
- python - 当列表切片中的范围错误时,我怎么可能没有收到错误消息?