When/where 引入全局设置?

When/where to pull in global settings?

我的应用程序有许多在我的大多数不同页面中使用的设置,我目前每次都在每个不同的页面中加载这些设置。由于这些是全局设置,我想在登录时将它们全部拉入,将它们放在反应上下文中,然后根据各种组件的需要从上下文中获取它们。

我已经完成了一些快速测试,但是 运行 遇到了各种问题,例如我的上下文试图在登录完成之前引入设置(由于没有令牌而失败)。我将设置调用放在我的仪表板组件中,除了用户可以在仪表板周围导航而错过设置调用外,它可以正常工作。

我觉得一定有一个我没有考虑过的简单推荐模式。让我知道任何想法!

发布我当前的 'solution' 以防有用。我将按照 François 的建议研究使用 localStorage,但在我想到 localStorage 之前,我发现了这种将我的数据放入 React 上下文的方法。我不确定为什么我的方法运行得如此好,因为它感觉有点超出预期的 react-admin 行为,但就是这样!

首先,我制作了一个 React 上下文 (PackageFieldsContext) 并包装了我的 Admin 组件。我放置了一个自定义组件作为 Admin 子组件之一 - 该组件 (PackageFieldsDataFetcher) 没有内容,没有可访问的路径,也没有呈现任何内容。它使用自定义挂钩获取数据并将数据放入上下文中。

具有提供程序和数据获取器组件的管理员:

    <PackageFieldsProvider >
      <Admin 
        authProvider={authProvider} 
        dataProvider={dataProvider} 
        dashboard={Dashboard}
        layout={MyLayout}
        customRoutes={customRoutes}
      >
        <Resource 
          name="Packages" 
          list={PackageList}
        />
        <PackageFieldsDataFetcher />
      </Admin>         
    </PackageFieldsProvider>

组件:

  const PackageFieldsDataFetcher = () => {
    const { setPackageFields } = useContext(PackageFieldsContext); //get useState setter from context
    const [ fieldsLoading, returnedFields, ] = useGetPackageFields(); // retrieve data with my custom hook

    useEffect(() => {
      if(!fieldsLoading) {
        setPackageFields(returnedFields);
      }
    }, [fieldsLoading]); //when fields are loaded, set them in context
  
    return (
      <>
      </>
    );
 }

这感觉有点老套;我知道即使我的自定义组件有东西要渲染,Admin 组件也不会渲染它,因为它不是资源。但是,管理员似乎仍然让组件中的其他所有内容正常工作。

此组件在登录前确实得到 'mounted',因此它总是尝试在登录前伸出手来提取数据,因此我在加载页面时总是收到 401。我确定我可以使用 useAuthenticated 或 useAuthState 挂钩来阻止此 401 错误,但我们会看到......可能还有一些我还没有看到的其他问题