首页 > 解决方案 > 创建一个无法访问 React 生命周期的钩子会导致项目进一步发展的问题吗?

问题描述

我创建了一个名为的钩子useFilestack,它现在抽象了从二进制文件上传文件的逻辑,但将来它可以根据需要增长。所以它看起来像这样:

const useFilestack = () => {
  const upload = (binary: string) => {
    const file = Buffer.from(binary, 'binary').toString('base64');

    const filestack = client.init(apiKey);

    filestack.upload(file);
  };

  return {
    upload,
  };
};

如您所见,它无法访问 React 生命周期,例如 someuseEffectuseState.

这是一个坏习惯吗?我将在很多地方使用它,所以在某个地方抽象它对我来说是有意义的。

编辑:我编辑了这个问题,所以它不是基于意见的。感谢@Heret Monkey 的建议。

标签: reactjsdesign-patternsreact-hookslifecyclereusability

解决方案


它只是目前不是一个钩子,所以你不必使用use*命名约定。

甚至有人会争辩说你不应该使用钩子命名约定,因为其他人可能认为这个函数必须像钩子一样使用(“钩子规则”)。

自定义钩子不仅仅是在组件中调用的函数,而是在内部实际使用一个或多个钩子的函数。除了名字之外,没有什么不好的。它只是一个封装了某个工作流程的辅助函数。

除非您认为它会在不久的将来使用钩子,否则您可以将其命名为不同的名称,以免其他人将其与钩子混淆。


推荐阅读