当前位置: 首页 > 知识库问答 >
问题:

react.js - React 比较好的存储全局数据的方法 ?

鱼旺
2023-08-13

例如登录后存储当前登录用户的信息:id 那么总不能用到的时候每次都去请求,那么 useContext 是不是用来解决这个问题的,还有有更好的解决方案?不懂

共有5个答案

郦良才
2023-08-13

简单一点可以挂在window上,但是数据更新时,就无法自动渲染。

如果要使用状态管理库,我推荐使用zustand,原生支持hook写法,简单快速。

根据你的需求,首先我们导出了一个名为 useUserStore 的函数,该函数使用 create 方法创建了一个新的状态存储。该存储包含一个 currentUser 属性和一个 setCurrentUser 方法,用于设置当前登录用户。

import create from 'zustand'export const useUserStore = create((set) => ({  currentUser: null,  setCurrentUser: (user) => set(() => ({ currentUser: user })),}))

在组件中使用 store:

import { useUserStore } from './userStore'function UserInfo() {  const { currentUser } = useUserStore()  return (    <div>      <p>User ID: {currentUser.id}</p>      <p>User Name: {currentUser.name}</p>    </div>  )}
夏飞掣
2023-08-13

除了使用 Redux 等状态管理,还可以使用黑科技,将全局变量储存到 windowglobalThis 对象上:

window.globalState = {};globalState.id = id;

但是这样还不能持久化,页面刷新变量会重新赋值,id 也需要重新请求。还需要配合 localStoragesessionStorage 将状态保存下来。

你可以将这个 globalState 封装好,暴露 getGlobalValuesetGlobalValue 方法;

注意,只有当数据比较少的时候可以使用这种方式,如果数据比较多,状态比较复杂,还是应该用状态管理。

慕容坚
2023-08-13

存储 Storage

翟修明
2023-08-13

Redux 中文官网

奚才良
2023-08-13

用 useContext 和 useReducer 或者 useState,轻量级的解决方案:

const UserContext = React.createContext();function UserProvider({ children }) {  const [user, setUser] = useState(null);  return (    <UserContext.Provider value={{ user, setUser }}>      {children}    </UserContext.Provider>  );}function useUser() {  const context = useContext(UserContext);  if (!context) {    throw new Error("useUser must be used within a UserProvider");  }  return context;}// 在组件里用function Profile() {  const { user } = useUser();  return <div>{user.id}</div>;}

或者用 MobX:

import { observable } from 'mobx';import { observer } from 'mobx-react';class UserStore {  @observable user = null;}const userStore = new UserStore();const Profile = observer(() => (  <div>{userStore.user.id}</div>));
 类似资料:
  • ObjectHolder类型的对象中的多用途字段包含对象OBJ。obj可能存储包装的基元或基元数组。如果两个对象是数组,我们如何比较它们?一个简化的例子:

  • 问题内容: 我有一个数据库(表),其中2个字段是: 日期以这种方式存储: 例如:数据库中的“ 2014-10-30 10:10:10”。 现在我想比较两个日期并使用查询2014-09-10 10:10:10()到2014-10-10 10:10:10()从数据库中获取记录 如何获取所有准确的记录..有什么解决方案.. 谢谢。 问题答案: 只需比较字符串即可,无需额外的开销。 此格式为“YYYY-M

  • 本文向大家介绍php实现比较全的数据库操作类,包括了php实现比较全的数据库操作类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现比较全的数据库操作类。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。

  • 我有一个文本框来输入网站上用户的全名。我使用电子邮件从数据库中获取用户名、姓氏和中间名/缩写。 请帮助我解析用户输入的全名,并与db值进行比较。 如果全名只有两个空格,我可以使用上面的解决方案。名字或姓氏有空格的地方我不及格。请给我提供一些正则表达式或建议我一个更好的方法来比较字符串和空格。 示例名称: 第一名|首字母|姓氏-詹姆斯·贝思|S|沃森·金 firstName|首字母|lastName

  • 我刚开始和拉威尔一起工作。我需要重写我几年前制作的整个系统,使用Laravel4作为基本框架。在我的旧系统中,我曾经有一个文件,其中声明了一些常量和一个文件,其中包含大量数组集(例如,类别、状态、事件类型、语言等)。通过这样做,我可以使用 在我的应用程序的任何地方。 我的问题是,我如何以所谓的“laravel方式”存储这些信息。我尝试使用某种对象来存储这些信息,将其设置为服务并为其创建门面: Ap

  • 什么是更好的解决方案? 我在想,什么是性能上更好,或者哪个更“正确”? 或 我认为第二个是因为封装规则?