Reputation: 1
user and user/:id working correct but other paths doesnt work and redirect to user/:id page...
<Router>
<div>
<TopMenu />
<div className="page-container" style={style.content}>
<div className="page-content">
<Sidebar />
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/login" component={Login} />
<Route exact path="/user" component={ListUsers}/>
<Route exact path="/user/:id" component={UserDetails} />
<Route exact path="/user/create" component={AddNewUser} />
<Route exact path="/user/roles" component={ListRoles} />
<Route exact path="/user/roles/:id" component={RoleDetails} />
<Route exact path="/user/role/create" component={AddNewRole} />
</Switch>
</div>
</div>
</div>
</Router>,
Upvotes: 0
Views: 92
Reputation: 33554
These routes are the same, because you could have an id = 'create'
<Route exact path="/user/:id" component={UserDetails} />
<Route exact path="/user/create" component={AddNewUser} />
So you should match the more specific one first, so it matches before the variable one:
<Route exact path="/user/roles" component={ListRoles} />
<Route exact path="/user/role/create" component={AddNewRole} />
<Route exact path="/user/roles/:id" component={RoleDetails} />
<Route exact path="/user/create" component={AddNewUser} />
<Route exact path="/user/:id" component={UserDetails} />
Upvotes: 3
Reputation: 4228
Because :id
could be anything, you need to put it after any static /user/whatever
routes.
Upvotes: 2
Reputation: 5243
Change your switch to
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/login" component={Login} />
<Route exact path="/user" component={ListUsers}/>
<Route exact path="/user/create" component={AddNewUser} />
<Route exact path="/user/roles" component={ListRoles} />
<Route exact path="/user/role/create" component={AddNewRole} />
<Route exact path="/user/roles/:id" component={RoleDetails} />
<Route exact path="/user/:id" component={UserDetails} />
</Switch>
In your Switch the :id
route was matching before the create
and roles
routes were tested.
Upvotes: 1