javascript - 如何在 React 应用程序中保留数据以最小化服务器调用

标签 javascript reactjs react-hooks

在我的一个 ReactJS 页面中,有两个下拉菜单,在选择一个或另一个的值时,它会调用服务器 API 来获取数据。为了获取数据,我正在使用 useEffect Hook ,如下所示

export const useFetch = () => {
const [state, setState] = useState({ data: null, loading: true });

useEffect(() => {
setState(state => ({ data: state.data, loading: true }));
fetch(url)
  .then(x => x.text())
  .then(y => {
    setState({ data: y, loading: false });
  });
}, []);

return state;
};

现在,从下拉菜单中,可以进行一定数量的组合来获取 API 数据,因为选项不会太大,对于任何组合,API 的值将保持不变,所以我需要阻止 API 调用,如果之前已经获取了相同的组合数据并仅利用之前的组合数据并最小化我的组件重新渲染(如果路由更改并且返回,这也是一种情况)。

请建议在这种情况下如何处理。我已经研究了浏览器的 localstorage 但如果浏览器/选项卡关闭等,清理 localstorage 值会有点问题

最佳答案

  • 如果您希望在应用程序启动时保留数据,请使用 Redux
  • 如果您希望为整个 session 保留数据,请使用 sessionStorage(浏览器窗口关闭后将被删除)
  • 如果您希望数据在有效期内一直保留,请使用 localStorage,如果需要,您可以在beforeUnload 事件 上清除存储

例子:

  componentDidMount() {
    window.addEventListener('beforeunload', this.handleBeforeunload)
  }

  componentWillUnmount() {
    window.removeEventListener('beforeunload', this.handleBeforeunload)
  }

  handleBeforeunload() {
      localStorage.removeItem('myItem')
  }

关于javascript - 如何在 React 应用程序中保留数据以最小化服务器调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59376446/

相关文章:

javascript - 附加html并动态刷新

javascript - Chrome打包应用存储错误

javascript - meteor / react - "readOnly"属性有什么作用?

reactjs - REACT 在渲染 UI 之前等待 useEffect 完成

javascript - 当数组作为依赖项传递时,React 中的 useEffect 会在无限循环中运行

javascript - 如何在 JavaScript 中调整图像大小和显示图像

javascript - 当前值未反射(reflect)在 reactjs 选择组件中

javascript - 如何使用 Yup 验证对象数组中至少一个对象键具有真实值?

javascript - 使用 refs 从父级调用子级钩子(Hook)函数

javascript - 在 React/Redux 中插入对象时如何避免 'two children with the same key' 警告