微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

何时/何地引入全局设置?

如何解决何时/何地引入全局设置?

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

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

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

解决方法

如果有用,请发布我当前的“解决方案”。我将按照 François 的建议研究使用 localStorage,但在我想到 localStorage 之前,我发现了这种将数据放入 React Context 的方法。我不太确定为什么我的方法运行得这么好,因为它感觉有点超出预期的 react-admin 行为,但就是这样!

首先我创建了一个 React Context (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 (
      <>
      </>
    );
 }

这感觉有点hacky;我知道即使我的自定义组件要呈现某些内容,Admin 组件也不会呈现它,因为它不是资源。但是,Admin 似乎仍然让组件中的其他一切工作。

这个组件在登录前确实被“挂载”了,所以它总是在登录前尝试获取数据,所以我在加载页面时总是得到 401。我确定我可以使用 useAuthenticated 或 useAuthState 钩子来阻止这个 401 错误,但我们会看到.. 可能还有一些我还没有看到的其他问题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。