在ReactRouter中映射路由
来自菜鸟教程
在某些情况下,将路由存储为对象而不是组件可能是有益的。
问题
在更大的应用程序中,路由很快就会变得重复、冗长和重复。 😉
// App.js class App extends Component { render() { return ( <BrowserRouter> <div> <Route exact path="/" component={HomePage} /> <Route exact path="/Teachers" component={TeacherListPage} /> <Route exact path="/Teachers/:teacherId" component={TeacherPage} /> <Route exact path="/Teachers/:teacherId/Classes" component={TaughtClassesPage} /> {/* And on and on for classes, grades, students, et cetera. */} </div> </BrowserRouter> ); } }
这是 render
中间的一大块文本。 它有效,但看起来不太好。 以前版本的 React Router 将路由表示为对象; 虽然 React Router 4 没有这种语法,但很容易将类似的东西组合在一起。
将路由表示为对象
您可能注意到路线往往采用相同类型的道具。 让我们将它们表示为对象:
// You can declare this in `App.js`, but it might // be better to move it to its own file. const routes = [{ path: '/', component: HomePage, }, { path: '/Teachers', component: TeacherListPage, }, { path: '/Teachers/:teacherId', component: TeacherPage, }, { path: '/Teachers/:teacherId/Classes', component: TaughtClassesPage, }, /* And so on. */];
使用此对象,您可以简化 App
:
class App extends Component { render() { const routeComponents = routes.map(({path, component}, key) => <Route exact path={path} component={component} key={key} />); return ( <BrowserRouter> {routeComponents} </div> </BrowserRouter> ); } }