Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 仅匹配url中的特定ID_Reactjs_React Router_React Router Dom - Fatal编程技术网

Reactjs 仅匹配url中的特定ID

Reactjs 仅匹配url中的特定ID,reactjs,react-router,react-router-dom,Reactjs,React Router,React Router Dom,我正在尝试设置PageNotFound。第二条路线应仅匹配ID['1'、'2'、'3'];(无论我在api调用后得到什么,这些id值都会保存在主组件内部的redux存储中)。现在,当我尝试访问不正确的id时,它应该重定向到PageNotFound。若url中的id为4,那个么它应该重定向到PageNotFound 我是在重定向时实现这是用户组件,还是有办法在下面的App.js文件中设置它 import { BrowserRouter as Router, Switch, Route } from

我正在尝试设置PageNotFound。第二条路线应仅匹配ID['1'、'2'、'3'];(无论我在api调用后得到什么,这些id值都会保存在主组件内部的redux存储中)。现在,当我尝试访问不正确的id时,它应该重定向到PageNotFound。若url中的id为4,那个么它应该重定向到PageNotFound

我是在重定向时实现这是用户组件,还是有办法在下面的App.js文件中设置它

import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import Home from "./Pages/Home";
import User from "./Pages/User";
import PageNotFound from "./Pages/PageNotFound";

import "./App.css";

function App() {
  return (
    <div className="App">
      <Router>
        <Switch>
          <Route path="/" exact component={Home} />
          <Route path="/user/:id" exact component={User} />
          <Route path="*" exact component={PageNotFound} />
        </Switch>
      </Router>
      ;
    </div>
  );
}

export default App;

从“react Router dom”导入{BrowserRouter as Router,Switch,Route};
从“/Pages/Home”导入主页;
从“/Pages/User”导入用户;
从“/Pages/PageNotFound”导入PageNotFound;
导入“/App.css”;
函数App(){
返回(
;
);
}
导出默认应用程序;

您可以创建通用组件进行验证。 解决方案应该是这样的

  <Route path="/user/:id" exact component={MyCheckComponent} />


MyCheckComponent.jsx


const MyCheckComponent =(props) => {
   const {id} = useParams()
   const allowedIds = useSelector(s => s.user.allowedIds)
   return allowedIds.includes(id) ? <User {...props} /> : <Redirect to="/not-found"/>
}


常量MyCheckComponent=(道具)=>{
const{id}=useParams()
const allowedIds=useSelector(s=>s.user.allowedIds)
返回允许的id。包括(id)?:
}

最后,您可以使用路由的render prop删除MyCheckComponent。

是否有理由不在App.js中执行fetch调用?你可以让ID处于一个状态,并让你的路由基于这个状态,只要保持干净,只需要在那里有路由。我只是想知道如果让我们假设id是4,它将匹配第二个路由,这很好,但是应该有额外的检查,看看4是否是有效的id之一,如果不是,那么我需要重定向到页面未找到路由如果你不想在这里做检查,你也可以将用户重定向到用户组件内的页面未找到路径