使用可选链接后。问题 JSON 中位置 0 的意外标记 u

Posted

技术标签:

【中文标题】使用可选链接后。问题 JSON 中位置 0 的意外标记 u【英文标题】:After using optional chaining. Problem Unexpected token u in JSON at position 0 【发布时间】:2022-01-07 00:19:16 【问题描述】:

使用可选链后,我收到了这个问题。

JSON 中位置 0 处的意外标记 u

import axios from 'axios'

const BASE_URL = 'http://localhost:5000/api'
const TOKEN = JSON.parse(JSON.parse(localStorage.getItem('persist:root'))?.user)
    ?.currentUser?.accessToken || null

export const publicRequest = axios.create(
  baseURL: BASE_URL,
)

export const userRequest = axios.create(
  baseURL: BASE_URL,
  headers:  token: `Bearer $TOKEN` ,
)

编辑添加:

【问题讨论】:

persist:root 里面是什么? @SurjeetBhadauriya 它现在是空的,只要我没有登录,程序就不应该在本地存储中获取令牌,这就是我使用 optinal 链的原因。如果我做错了请纠正我 你应该解析两次吗?错误在JSON.parse 内抛出 通过向我们展示您希望在 persist:root 中出现的字符串示例(如果它不为空),我们可以为您提供进一步的帮助。 @s_sldiblood,不需要做两次 JSON.parse。所以只需将您的代码替换为JSON.parse(localStorage.getItem('persist:root'))?.user?.currentUser?.accessToken || null 【参考方案1】:

试试这个:

const TOKEN = JSON.parse(JSON.parse(localStorage.getItem('persist:root'))?.user ?? null)?.currentUser?.accessToken || null;

同理:

const storageItem = localStorage.getItem('persist:root'); // string or null
const parsedObject = JSON.parse(storageItem); // parsed object or null
const parsedUser = JSON.parse(parsedObject?.user ?? null); // parsed user or null
const TOKEN = parsedUser?.currentUser?.accessToken || null; // the token or null

【讨论】:

【参考方案2】:

你为什么要解析 persist:root,这个对象是由 redux-persist 库设置的,它是你的 redux 存储的副本。如果你想从存储中获取任何数据,请在你的 React 组件中使用 useSelector 钩子。

【讨论】:

以上是关于使用可选链接后。问题 JSON 中位置 0 的意外标记 u的主要内容,如果未能解决你的问题,请参考以下文章

实现包罗万象的快速路由解决方案后获取 API 调用失败:位置 0 处 JSON 中的意外令牌 <

JSON 中位于位置 0(...) 的意外标记 r

在 ReactJS 中使用 fetch 时,JSON 中位于位置 0 的意外令牌 I

在位置 0 的 JSON 中出现意外的语法错误 <

JSON 中位置 0 处的意外标记 u

JSON - Blender & ThreeJS - JSON 中的意外标记 < 位置 0