簡體   English   中英

如何從本地存儲獲取數據並設置狀態反應

[英]how to get data from localstorage and set state react

我有一個 localstorage,它有一個鍵“cartProduct”和一個包含對象數組的值

[
{"id":"001",
"productName":"Tesla",
"categories":"car",
"price":1000000,
"quantity": 1
},
{
"id":"002",
"productName":"Honda",
"categories":"motorcycle",
"price":10000,
"quantity": 2
}
]

我嘗試制作函數從localstorage獲取數據,設置狀態並以輸入形式顯示,但數據仍然沒有出現。

function Data() (
  const carts = JSON.parse(localStorage.getItem("cartProduct"));
  const [name, setName] = localStorage.setItem('myData', carts);
    <div>
      <input
        type="text"
        placeholder=" product" 
        value={name} //value from productname with id: 001
        onChange={el => setName(el.target.value)}
      />
      <input
        type="text"
        placeholder="product"
        value={name} //value from productname with id: 002
        onChange={el => setName(el.target.value)}
      />
    </div>
  );
}

但顯示和錯誤“localStorage.setItem(...) 未定義”如何解決?

您正在嘗試將對象保存到本地存儲中。 您必須先將其轉換為字符串。 像下面這樣

const [name, setName] = localStorage.setItem('myData', JSON.stringify(carts));
const [cards, setCards] = useState(JSON.parse((localStorage.getItem('carts'))));

它會起作用!

localStorage 無法存儲對象,如果您真的願意,對象將像這樣存儲。

"[object Object],[object Object]"

因此,您需要在保存對象之前將其轉換為 JSON 字符串。

let data = [
      {
        "id": "001",
        "productName": "Tesla",
        "categories": "car",
        "price": 1000000,
        "quantity": 1
      },
      {
        "id": "002",
        "productName": "Honda",
        "categories": "motorcycle",
        "price": 10000,
        "quantity": 2
      }
    ]

let jsonString = JSON.stringify(data)
localStorage.setItem('cartProduct', jsonString)

當您要檢索它時,您可以像這樣再次將其解析回 JavaScript 對象

const carts = JSON.parse(localStorage.getItem("cartProduct"));

但是關於您的主要關注點,請嘗試使用此代碼:

import React, { useState } from 'react';
const carts = JSON.parse(localStorage.getItem('cartProduct'));

function Data() {
  const [name, setName] = useState(carts);
  function handleChange(e) {
    const {value} = e.target
    setName(()=> value)
  }
  return (
    <div>
      <input
        type="text"
        placeholder=" product"
        value={name} //value from productname with id: 001
        onChange={handleChange}
      />
      <input
        type="text"
        placeholder="product"
        value={name} //value from productname with id: 002
        onChange={handleChange}
      />
    </div>
  );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM