Javascript 您不应该使用<;链接>;a<;路由器>;在皮拉尔

Javascript 您不应该使用<;链接>;a<;路由器>;在皮拉尔,javascript,reactjs,react-router-dom,piral,Javascript,Reactjs,React Router Dom,Piral,在默认Piral实例内调试pilet时,我遇到此错误: Uncaught Error: Invariant failed: You should not use <Link> outside a <Router> My pilet index.jsx: import { Link } from 'react-router-dom' const App = () => 'My pilet' export function setup(app) { app.r

在默认Piral实例内调试pilet时,我遇到此错误:

Uncaught Error: Invariant failed: You should not use <Link> outside a <Router>
My pilet index.jsx:

import { Link } from 'react-router-dom'

const App = () => 'My pilet'

export function setup(app) {
  app.registerPage('/my-pilet', App)
  app.registerMenu(() => <Link to="/my-pilet">My Pilet</Link>)
}
从'react router dom'导入{Link}
const App=()=>“我的皮莱”
导出功能设置(应用程序){
应用程序注册表页('/my pilet',应用程序)
app.registerMenu(()=>My Pilet)
}
我的Piral实例使用了
Piral cli
提供的样板文件,并且完全没有改变。它甚至有一个默认菜单项,可以正常工作而不出错:

(未找到是Piral提供的默认菜单项)

为什么我会犯这个错误

  • 皮拉尔0.12.4
  • Piral CLI 0.12.4
  • Piral CLI网页包0.12.4

错误是不言自明的,您只需将路由器标签附在一起即可。试试这个:

import { BrowserRouter as Router, Link } from 'react-router-dom'

const App = () => 'My pilet'

export function setup(app) {
  app.registerPage('/my-pilet', App)
  app.registerMenu(() => <Router> <Link to="/my-pilet">My Pilet</Link> <Router>)
}
从'react Router dom'导入{BrowserRouter as Router,Link}
const App=()=>“我的皮莱”
导出功能设置(应用程序){
应用程序注册表页('/my pilet',应用程序)
app.registerMenu(()=>My Pilet)
}

来源:

您的设置一定有问题。如果出现此错误,则表示您的
链接
的路由上下文与来自应用程序外壳的路由上下文不同。我怀疑您没有共享
react路由器dom
。将其放入pilet的package.json的
peerDependencies

pilet提供了一个现成的路由器,因此这意味着在同一应用程序中有两个路由器如果这是一个脚手架pilet(通过
pilet new
npm init pilet
),并且缺少对等依赖项,请告知我们。事实不应如此。当你搭建脚手架的时候,设置应该是这样的,这样就可以了。我的木桩没有搭建脚手架,我自己做的,所以我错过了所有的对等依赖。谢谢你的澄清!我们让开发人员决定他们想要共享哪些依赖项(以及他们想要实际使用哪些共享依赖项)。因此,你们甚至可以带上你们自己的React(或者React路由器来保持话题)和你们的pilet。这不是我们的建议,但可能有道理。
import { BrowserRouter as Router, Link } from 'react-router-dom'

const App = () => 'My pilet'

export function setup(app) {
  app.registerPage('/my-pilet', App)
  app.registerMenu(() => <Router> <Link to="/my-pilet">My Pilet</Link> <Router>)
}