Ecmascript 6 React路由器v4+;正则表达式don';不喜欢模板文本

Ecmascript 6 React路由器v4+;正则表达式don';不喜欢模板文本,ecmascript-6,react-router,template-literals,Ecmascript 6,React Router,Template Literals,React Router 4.0.0附带Regex,用于验证查询字符串参数。 但是,它似乎与ES6模板文本不兼容 下面是一个非常简单的例子: <BrowserRouter> <Switch> <Route Route path={routeConstant} component={MyComponent} /> </Switch> </BrowserRouter> 如果您尝试使用以下值,您将看到前两个常量有效,但第

React Router 4.0.0附带Regex,用于验证查询字符串参数。 但是,它似乎与ES6模板文本不兼容

下面是一个非常简单的例子:

<BrowserRouter>
  <Switch>
    <Route Route path={routeConstant} component={MyComponent} />
  </Switch>
</BrowserRouter>

如果您尝试使用以下值,您将看到前两个常量有效,但第三个常量无效

const root = 'folder'
const routeConstant1 = '/folder/:id(\d+)'  // <= /folder/21 matches
const routeConstant2 = `/${root}/:id`      // <= /folder/21 matches
const routeConstant3 = `/${root}/:id(\d+)` // <= /folder/21 does not match
const root='folder'

const routeConstant1='/folder/:id(\d+)'/好的,我想我把那个问题发得太快了

答案在于模板文字的工作方式:

=>“不解释反斜杠”

因此,让routeConstant3工作的解决方案就是这样写:

const routeConstant3 = `/${root}/:id(\\d+)`

它知道/folder/21,但/folder/21abc应该是无效路由,这就是该检查失败的原因,并且react路由器试图呈现无效路由。