【问题标题】:How do i convert custom hook into HOC?如何将自定义挂钩转换为 HOC?
【发布时间】:2020-10-04 20:15:19
【问题描述】:

我制作了自定义钩子并用于不是反应组件的拦截器。它是 javascript 函数所以我得到了这个错误-

无效的钩子调用。钩子只能在函数组件的主体内部调用

这很不幸,因为它阻止了我们在旧的基于类的组件和常规的 javascript 函数中使用新的基于钩子的模块。 所以现在我想将自定义钩子转换为 HOC。

const useLoader = props => {
  const [loading, setLoading] = useState(props);

  return [
    loading ? <Loader /> : null,
    () => setLoading(true), // show loader
    () => setLoading(false) // hideLoader
  ];
};
export default useLoader;

我怎么能做到我从来没有写过 HOC。

Here is the code


所以要求是当我点击继续按钮时,加载程序将在获得响应后在 api 调用的屏幕上可见,然后只有加载程序会消失并导航到下一页。

这里是更新的代码,我已经用 HOC 进行了更新,但是 loader 似乎只在我加载页面时第一次工作。 我在这里想念什么?

Updated with HOC - codeSandboax

【问题讨论】:

  • 你到底想要达到什么目的?
  • 我有一个不是反应功能组件的拦截器。所以当我试图在我的拦截器中使用自定义钩子(useLoader)时,我得到了错误 Invalid hook call。 Hooks 只能在函数组件的主体内部调用。 所以我们可以在常规函数中使用自定义 hook。所以这就是为什么我想将自定义挂钩转换为 HOC。 ---
  • 它是什么拦截器/常规函数?能给我们举个例子吗?
  • 是的,我已经添加了代码链接@Hangindev
  • 哦,你的想法是在axios的拦截器中使用它?

标签: javascript reactjs react-hooks jsx higher-order-functions


【解决方案1】:

你可以这样试试。

const LoaderHOC = ({ Component }) => {
  const [loading, setLoading] = useState(props);

  const toggleLoading = () => {
    setLoading(!loading)
  }

  return (
    loading ? <Loader/> : <Component toggleLoading={toggleLoading}/>
  )
};
export default useLoader;

我想你会明白的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2022-01-27
  • 2018-11-30
  • 1970-01-01
  • 2021-12-07
  • 2020-07-26
  • 1970-01-01
相关资源
最近更新 更多