1. The component First.js has subcomponents:import Admin from './Admin' import FormCom from './FormCom' import One from './One' import ButtonCom from './ButtonCom' import MenuCom from './MenuCom' import StepsCom from './StepsCom' import TabsCom from './TabsCom' import TableCom from './TableCom' import MessageCom from './MessageCom' import NotificationCom from './NotificationCom' import ProgressCom from './ProgressCom' import SpinCom from './SpinCom' import BadgeCom from './BadgeCom' The complete code of First.js is as follows: import React from 'react' import { Layout, Menu } from 'antd'; import { UserOutlined, LaptopOutlined, NotificationOutlined } from '@ant-design/icons'; import { HashRouter, Route, Link } from 'react-router-dom' import Admin from './Admin' import FormCom from './FormCom' import One from './One' import ButtonCom from './ButtonCom' import MenuCom from './MenuCom' import StepsCom from './StepsCom' import TabsCom from './TabsCom' import TableCom from './TableCom' import MessageCom from './MessageCom' import NotificationCom from './NotificationCom' import ProgressCom from './ProgressCom' import SpinCom from './SpinCom' import BadgeCom from './BadgeCom' const { SubMenu } = Menu; const { Header, Content, Sider } = Layout; export default class First extends React.Component { constructor() { super(); } //Only expand the current parent menu begin rootSubmenuKeys = ['sub1', 'sub2', 'sub3']; state = { openKeys: ['sub1'], }; onOpenChange = openKeys => { const latestOpenKey = openKeys.find(key => this.state.openKeys.indexOf(key) === -1); if (this.rootSubmenuKeys.indexOf(latestOpenKey) === -1) { this.setState({ openKeys }); } else { this.setState({ openKeys: latestOpenKey ? [latestOpenKey] : [], }); } }; //Only expand the current parent menu end render() { return (<div> <Layout> <HashRouter> <Header className="header" style={{ position: 'fixed', zIndex: 1, width: '100%', paddingLeft: '20px'}}> <div className="logo" style={{fontSize: '32px', color: '#ffffff', fontWeight: 'bold'}}>React App</div> <Menu theme="dark" mode="horizontal" defaultSelectedKeys={['1']}> {/*<Menu.Item key="1">nav 1</Menu.Item> <Menu.Item key="2">nav 2</Menu.Item> <Menu.Item key="3">nav 3</Menu.Item>*/} </Menu> </Header> <Layout> <Sider width={200} className="site-layout-background" style={{ overflow: 'auto', height: '100vh', position: 'fixed', left: 0, }}> <Menu theme="dark" mode="inline" defaultSelectedKeys={['2']} defaultOpenKeys={['sub1']} style={{ height: '100%', paddingTop: '60px', borderRight: 0 }} onOpenChange={this.onOpenChange} openKeys={this.state.openKeys} > <SubMenu key="sub1" icon={<UserOutlined />} title="subnav 1"> <Menu.Item key="1"><Link to={`${this.props.match.path}/admin`}>admin</Link></Menu.Item> <Menu.Item key="2"><Link to={`${this.props.match.path}/form`}>form</Link></Menu.Item> <Menu.Item key="3"><Link to={`${this.props.match.path}/one`}>One</Link></Menu.Item> <Menu.Item key="4"><Link to={`${this.props.match.path}/menu`}>Menu</Link></Menu.Item> </SubMenu> <SubMenu key="sub2" icon={<LaptopOutlined />} title="subnav 2"> <Menu.Item key="5"><Link to={`${this.props.match.path}/step`}>Step</Link></Menu.Item> <Menu.Item key="6"><Link to={`${this.props.match.path}/tabs`}>Tabs</Link></Menu.Item> <Menu.Item key="7"><Link to={`${this.props.match.path}/table`}>Table</Link></Menu.Item> <Menu.Item key="8"><Link to={`${this.props.match.path}/message`}>Message</Link></Menu.Item> </SubMenu> <SubMenu key="sub3" icon={<NotificationOutlined />} title="subnav 3"> <Menu.Item key="9"><Link to={`${this.props.match.path}/notification`}>Notification</Link></Menu.Item> <Menu.Item key="10"><Link to={`${this.props.match.path}/progress`}>ProgressCom</Link></Menu.Item> <Menu.Item key="11"><Link to={`${this.props.match.path}/spin`}>Spin</Link></Menu.Item> <Menu.Item key="12"><Link to={`${this.props.match.path}/badge`}>Badge</Link></Menu.Item> <Menu.Item key="13"><Link to={`${this.props.match.path}/button`}>Button</Link></Menu.Item> </SubMenu> </Menu> </Sider> <Layout style={{ padding: '84px 20px 20px', marginLeft: 200}}> <Content className="site-layout-background" style={{ padding: 24, margin: 0 }} > <Route path={`${this.props.match.path}/admin`} exact component={Admin}></Route> <Route path={`${this.props.match.path}/form`} component={FormCom}></Route> <Route path={`${this.props.match.path}/one`} component={One}></Route> <Route path={`${this.props.match.path}/menu`} component={MenuCom}></Route> <Route path={`${this.props.match.path}/step`} component={StepsCom}></Route> <Route path={`${this.props.match.path}/tabs`} component={TabsCom}></Route> <Route path={`${this.props.match.path}/table`} component={TableCom}></Route> <Route path={`${this.props.match.path}/message`} component={MessageCom}></Route> <Route path={`${this.props.match.path}/notification`} component={NotificationCom}></Route> <Route path={`${this.props.match.path}/progress`} component={ProgressCom}></Route> <Route path={`${this.props.match.path}/spin`} component={SpinCom}></Route> <Route path={`${this.props.match.path}/badge`} component={BadgeCom}></Route> <Route path={`${this.props.match.path}/button`} component={ButtonCom}></Route> </Content> </Layout> </Layout> </HashRouter> </Layout> </div>) } } in ${this.props.match.path} is the key. 2. Assume there is also a login component Login.js, the code is as follows:import React from 'react' import { Button } from 'antd'; export default class Login extends React.Component { constructor() { super(); } redirectHandle = () => { console.log("aaa"); this.props.history.push("/home"); } render() { return (<Button type="primary" onClick={()=>this.redirectHandle()}>Primary Button</Button>) } } Assuming that the React project is built with React scaffolding, set the route in the App.js file in the src directory: render() { return (<HashRouter> <Switch> <Route exact={true} path="/login" component={Login} /> <Route path="/home" component={First} /> <Redirect to='/login' /> {routes other than /*/login and /home jump directly to /login*/} </Switch> </HashRouter>) } The complete code of App.js is as follows: import React from 'react'; import { notification } from 'antd' import { HashRouter, Route, Switch, Redirect } from 'react-router-dom'; import First from './First'; import Login from './Login'; import './App.css'; class App extends React.Component { constructor() { super(); this.openNotificationWithIcon = type => { notification[type]({ message: 'Notification Title', description: 'This is the content of the notification. This is the content of the notification. This is the content of the notification.', }); } } clickHandle() { console.log("clicked!!!"); } render() { return (<HashRouter> <Switch> <Route exact={true} path="/login" component={Login} /> {/**exact prevents mixed routes, such as: input 127.xx.xx.xx/home contains the /login page*/} <Route path="/home" component={First} /> <Redirect to='/login' /> </Switch> </HashRouter>) } } export default App; The project directory structure is as follows: The project preview effect is as follows: This is the end of this article about the implementation of React configuration sub-routes. For more relevant React configuration sub-routes content, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: Nginx rewrite regular matching rewriting method example
>>: Summary of four situations of joint query between two tables in Mysql
Table of contents 1. Insert statement 1.1 Insert ...
Recently, the company is preparing to develop an ...
background: Since the company's projects seem...
1. Basic implementation of limit In general, the ...
Only show the top border <table frame=above>...
Due to the needs of the work project, song playba...
About Nginx, a high-performance, lightweight web ...
Table of contents 1. The concept of process and t...
Using CSS layout to create web pages that comply w...
This article shares the specific code for impleme...
The docker repository itself is very slow, but th...
Basics The matching order of location is "ma...
Table of contents Vue this.$store.state.xx.xx Get...
Preface If CSS is the basic skill of front-end de...
Table of contents What is a trigger Create a trig...