javascript - 使用按钮将数据添加/删除到本地浏览器存储中,并将其显示在 UI 表格中 (React)

标签 javascript reactjs caching browser local-storage

我想要一个 React 应用程序,它使用本地存储来存储数据,并将该数据显示在用户界面 (UI) 的表格中。

我希望能够通过单击按钮 (SUBMIT) 将条目提交到本地存储中,然后能够通过单击另一个按钮 (DELETE) 删除本地存储中的条目。

无论本地存储中存在什么数据,我都希望即使在刷新浏览器后,它也能显示在 UI 中的一个小表格中。

我已使用本教程 ( https://www.robinwieruch.de/local-storage-react#local-storage-in-react ) 作为本地存储的基础,并提供了我在下面的教程中使用的代码。但在本教程中,数据是通过在框中键入并将其显示在段落中来提交的。从开发者工具中我可以看到这仅适用于一个键值对。

代码:

import React from 'react';

const useStateWithLocalStorage = localStorageKey => {
  const [value, setValue] = React.useState(
    localStorage.getItem(localStorageKey) || ''
  );

  React.useEffect(() => {
    localStorage.setItem(localStorageKey, value);
  }, [value]);

  return [value, setValue];
};

const App = () => {
  const [value, setValue] = useStateWithLocalStorage(
    'myValueInLocalStorage'
  );

  const onChange = event => setValue(event.target.value);

  return (
    <div>
      <h1>Hello React with Local Storage!</h1>

      <input value={value} type="text" onChange={onChange} />

      <p>{value}</p>
    </div>
  );
};

export default App;

从教程中,我相信数据将是:

使用 localStorage.setItem('myData', data)提交到本地存储

使用localStorage.getItem('myData')在表格中显示

使用localStorage.removeItem('myData')localStorage.clear()从本地存储/表中删除

我的猜测是前面的每一段代码都将位于一个单独的函数中,该函数在 return() 中调用。

我在下面附上了我想要创建的内容,特别是 UI 的外观:

enter image description here

使用“提交”按钮将数据提交到本地存储,使用表中的“删除”按钮从本地存储中删除数据,而表中显示的所有内容都来自本地存储。

如果需要更多信息,请告诉我。有很多方法可以做到这一点,老实说我不知道​​该怎么做。例如,如果我需要创建一个类,该类中具有多个函数来执行上述操作(例如,一个用于提交的函数,另一个用于删除的函数,一个用于从表中检索数据的函数)。

最佳答案

要将数组存储在本地存储中,请使用 JSON.stringify,否则最终将存储逗号分隔的字符串

因此需要更改自定义 Hook 的代码以使用 JSON.stringify 和 JSON.parse

const useStateWithLocalStorageArray = localStorageKey => {  
  const [value, setValue] = React.useState(
    JSON.parse(localStorage.getItem(localStorageKey) || '[]' ) 
  );
  React.useEffect(() => {
    localStorage.setItem(localStorageKey, JSON.stringify(value))    
  }, [value]);
  return [value, setValue];
};

这里是 Plunker 的完整源代码 - https://plnkr.co/edit/NuSBnLpPpoOmmEE6

关于javascript - 使用按钮将数据添加/删除到本地浏览器存储中,并将其显示在 UI 表格中 (React),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60699289/

相关文章:

javascript - HTML5 基本拖放不适用于 FF 中的输入按钮

javascript - 使用 AJV 解析无效对象的自定义架构

javascript - 悬停动画CSS,悬停回到正常

javascript - Nextjs 外部 css 不在客户端页面转换时更新

html - 如何将 Strapi 文章中的文本下划线获取到我的 Gatsby 前端

ios - 重建项目时缓存图像 url 不存在

http - 如何忽略网络缓存中的查询参数?

javascript - 在 UI-Router 中调用子状态时触发无限循环

javascript - React - 从不同的复选框显示/隐藏多个 div

ios - 预取后从缓存中选取图像