如何在 React Router DOM 中使用正则表达式从路由匹配中排除参数?
How to exclude param from route matches with Regex in React Router DOM?
我的目标是拥有这样的路线
/confirm/resend : 显示重新发送表单
/confirm/31k41k2k12kl3lk : 检查令牌并重定向
/确认:显示表格
我的路由文件是这样的
<Route path="/auth/confirm/resend" component={component.Confirm} />
<Route exact path="/auth/confirm/:token(?!(resend))?" component={component.Confirm} />
问题是:token(?!(resend))?
这部分不工作。
我试图在此处匹配 /as12k 和 /1231jj1,但不匹配 /resend。
您可以使用 Switch
渲染它遇到的第一条路线
const Router = ReactRouterDOM.HashRouter;
const Route = ReactRouterDOM.Route;
const Link = ReactRouterDOM.Link;
const Switch = ReactRouterDOM.Switch;
const Confirm = ()=><div>Confirm</div>;
const Resend = ()=><div>Resend</div>
const Token = ()=><div>Token</div>
class App extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<Router>
<div>
<p>Main App</p>
<Link to="/confirm">Confirm </Link>
<Link to="/confirm/resend">Resend </Link>
<Link to="/confirm/123">Token </Link>
<Switch>
<Route exact path="/confirm/resend" component={Resend} />
<Route path="/confirm/:token" component={Token} />
<Route path="/confirm" component={Confirm} />
</Switch>
</div>
</Router>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-router/4.2.0/react-router.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-router-dom/4.2.2/react-router-dom.js"></script>
<div id="root"></div>
我的目标是拥有这样的路线
/confirm/resend : 显示重新发送表单
/confirm/31k41k2k12kl3lk : 检查令牌并重定向
/确认:显示表格
我的路由文件是这样的
<Route path="/auth/confirm/resend" component={component.Confirm} />
<Route exact path="/auth/confirm/:token(?!(resend))?" component={component.Confirm} />
问题是:token(?!(resend))?
这部分不工作。
我试图在此处匹配 /as12k 和 /1231jj1,但不匹配 /resend。
您可以使用 Switch
渲染它遇到的第一条路线
const Router = ReactRouterDOM.HashRouter;
const Route = ReactRouterDOM.Route;
const Link = ReactRouterDOM.Link;
const Switch = ReactRouterDOM.Switch;
const Confirm = ()=><div>Confirm</div>;
const Resend = ()=><div>Resend</div>
const Token = ()=><div>Token</div>
class App extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<Router>
<div>
<p>Main App</p>
<Link to="/confirm">Confirm </Link>
<Link to="/confirm/resend">Resend </Link>
<Link to="/confirm/123">Token </Link>
<Switch>
<Route exact path="/confirm/resend" component={Resend} />
<Route path="/confirm/:token" component={Token} />
<Route path="/confirm" component={Confirm} />
</Switch>
</div>
</Router>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-router/4.2.0/react-router.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-router-dom/4.2.2/react-router-dom.js"></script>
<div id="root"></div>