reactjs 使用HashRouter(React.js)的“download”属性从导航栏下载文件

xe55xuns  于 2023-01-12  发布在  React
关注(0)|答案(1)|浏览(104)

我有一个导航栏,我希望它的一个元素在点击它的时候下载一个在我的存储库的公共目录中的文件。我正在使用'react-router-dom'中的HashRouter
通常我们会使用'react-router-dom'中的Link

<Link
      key={section.name}
      to={section.link}
      download={section.link === '/myfile.txt' ? 'myfile.txt' : undefined}
    >
      {section.name}
    </Link>

但下载不起作用(文件未找到),因为知道该文件在公用文件夹中。
作为此问题的临时解决方案,我使用了<a>标记,但必须手动为其他导航栏元素添加#以进行导航:

<a
      key={section.name}
      href={section.link === '/myfile.txt' ? section.link : `#${section.link}`}
      download={section.link === '/myfile.txt' ? 'myfile.txt' : undefined}
    >
      {section.name}
    </a>

我的问题是,如何使用Link标记来实现这一点?

mefy6pfw

mefy6pfw1#

我建议创建一个自定义链接组件,根据download属性的存在情况,有条件地呈现Link组件或a元素。
示例:

const CustomLink = ({ children, download, to, ...props }) => {
  return download
    ? <a href={to} download={download} {...props}>{children}</a>
    : <Link to={to} {...props}>{children}</Link>;
};
<CustomLink
  key={section.name}
  to={section.link}
  download={section.download}
>
  {section.name}
</CustomLink>

相关问题