From 322646a9dcf48f850c8135c26c94e97730b49e38 Mon Sep 17 00:00:00 2001 From: Jimmy Liow Date: Fri, 7 Jun 2024 16:44:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:WebStorage=20=E5=A2=9E=E5=8A=A0=20JSON=20?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useStorage.js | 21 +++++++++++++++++---- src/views/App.jsx | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/hooks/useStorage.js b/src/hooks/useStorage.js index 5252acf..b0a821c 100644 --- a/src/hooks/useStorage.js +++ b/src/hooks/useStorage.js @@ -1,8 +1,9 @@ const persistObject = {} /** - * GH-INT:USER_ID -> userId = 456 - * GH-STR:LOGIN_TOKEN -> loginToken = 'E6779386E7D64DF0ADD0F97767E00D8B' + * G-INT:USER_ID -> userId = 456 + * G-STR:LOGIN_TOKEN -> loginToken = 'E6779386E7D64DF0ADD0F97767E00D8B' + * G-JSON:LOGIN_USER -> loginUser = { username: 'test-username' } */ export function useStorage() { @@ -22,7 +23,11 @@ export function useStorage() { if (typeAndKey.length === 2) { const propName = camelCasedWords(typeAndKey[1]) persistObject[propName] = value - webStorage.setItem(key, value) + if (typeAndKey[0] === 'G-JSON') { + webStorage.setItem(key, JSON.stringify(value)) + } else { + webStorage.setItem(key, value) + } } } @@ -51,8 +56,16 @@ export function useStorage() { if (typeAndKey.length === 2) { const value = webStorage.getItem(key) const propName = camelCasedWords(typeAndKey[1]) - if (typeAndKey[0] === 'GH-INT') { + if (typeAndKey[0] === 'G-INT') { persistObject[propName] = parseInt(value, 10) + } else if (typeAndKey[0] === 'G-JSON') { + try { + persistObject[propName] = JSON.parse(value) + } catch (e) { + // 如果解析失败,保留原始字符串值 + persistObject[propName] = value + console.error('解析 JSON 失败。') + } } else { persistObject[propName] = value } diff --git a/src/views/App.jsx b/src/views/App.jsx index ce0f282..51dd3cc 100644 --- a/src/views/App.jsx +++ b/src/views/App.jsx @@ -160,7 +160,7 @@ function App() { > e.preventDefault()}> - {loginUser.username} + {username}