我有一个<HashRouter>包装包含组件的<Link>组件,但是,我仍然收到错误Error: Invariant failed: You should not use <Link> outside a <Router>。是否有一些层次结构说您必须拥有比我更高级别的链接?我有<Link>
一个下拉菜单。像我的应用程序是:
<HashRouter>
<ComponentA>
<ComponentB>
<Link to="/my-path"/>
</ComponentB>
</ComponentA>
</HashRouter>
编辑:
我正在做的是<Link>在我从库中获得的下拉列表中添加一个自定义选项。它说我可以将自定义元素添加到我的下拉选项中。我正在制作的下拉菜单很复杂,里面有按钮,如果你点击标题,我想链接到一个地方。那里是Link进来的。当我在那里添加链接时,会出现错误消息,但当我将链接直接添加到使用下拉列表的组件时不会出现。这就是我拥有该组件的方式,该组件不起作用。这只是模拟数据,我使用的数据是在 a 中计算的.map:
const CustomLink = () => <Link to="/some-path">Title of link</Link>;
const data = [{
selected_key: 'id1',
content: [<CustomLink />, <CustomButton />]
},
...
]
return <DropdownFromLibrary data={data} />;
我想要/需要在数组中添加组件,但上面的示例不起作用。下面的操作确实可以使链接与下拉菜单位于同一组件内,但这不是我想要的,因为我需要计算每个选项的新路径:
return (
<>
<CustomLink />
<DropdownFromLibrary data={data} />
</>
);
解决方案
import { useHistory } from 'react-router-dom';
...
const history = useHistory();
const CustomLink = ({ id, title }) => <div onClick={() => history.push(`/some-title/${id}`)}>{title}</div>
const data = [{
selected_key: 'id1',
content: [<CustomLink />, <CustomButton />]
},
...
]
return <DropdownFromLibrary data={data} />;