การใช้ localStorage
มีประโยชน์สำหรับการจัดเก็บข้อมูลผ่านการรีเฟรชหน้า แต่อาจทำให้เกิดข้อผิดพลาดบางอย่างโดยไม่เข้าใจวิธีการจัดเก็บข้อมูล localStorage
เก็บข้อมูลเป็นสตริงเท่านั้น ดังนั้นเมื่อคุณบันทึกข้อมูลบางส่วน เช่น ตัวเลข localStorage.setItem("price", 1.20)
ตัวเลขจะถูกแยกวิเคราะห์เป็นสตริงก่อนที่ค่าจะถูกบันทึก เพื่อแสดงสิ่งนี้ ฉันจะลองป้อนสิ่งนี้ลงในคอนโซลของเบราว์เซอร์:
localStorage.setItem("price", 1.20) // => undefined const price = localStorage.getItem("price") // => '1.2' typeof price // => 'string'
เมื่อพยายามบันทึกวัตถุ (หรืออาร์เรย์) ปัญหาเดียวกันนี้เกิดขึ้น
localStorage.setItem("object", {one: 1, two: 2, three: 3}) // => undefined localStorage.getItem("object") // => '[object Object]'
เพื่อแก้ปัญหานี้ เราจำเป็นต้องแปลงออบเจ็กต์เป็น JSON เมื่อจัดเก็บไว้ใน localStorage
เนื่องจาก JSON เป็นข้อมูลที่บันทึกเป็นสตริง เรายังจำเป็นต้องแปลงจาก JSON เมื่อดึงข้อมูลจาก localStorage
ในการจัดเก็บข้อมูล เราจะดำเนินการโดยใช้ JSON.stringify
ซึ่งจะแปลงวัตถุ (หรืออาร์เรย์) เป็น JSON:
const myObject = {one: 1, two: 2, three: 3} // => {one: 1, two: 2, three: 3} localStorage.setItem("object", JSON.stringify(myObject)) // => undefined
ในการดึงข้อมูล ตอนนี้เราจะแยกวิเคราะห์หลังจากดึงข้อมูลแล้ว ซึ่งจะแปลงจาก JSON เป็นออบเจ็กต์หรืออาร์เรย์ JavaScript ปกติโดยใช้ JSON.parse
:
const myNewObject = JSON.parse(localStorage.getItem("object")) // => undefined myNewObject // => {one: 1, two: 2, three: 3} typeof myNewObject // => 'object'