App.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import {useState} from 'react';
  2. import logo from './logo.svg';
  3. import './App.scss';
  4. import {BrowserRouter as Router, Route, Link} from 'react-router-dom';
  5. import createHistory from "history/createBrowserHistory";
  6. const Logo = () =>
  7. <img src={logo} className="Logo"/>
  8. const defaultMenuItems = [
  9. {title: 'Home', to: '/'},
  10. {title: 'About', to: '/about'},
  11. {title: 'Login', to: '/login'},
  12. {title: 'Logout', to: '/logout'},
  13. {title: '2 + 2', to: '/add/2/2'},
  14. {title: '20 + 200', to: '/add/20/200'},
  15. ]
  16. const MenuItem = ({title, to}) =>
  17. <li>
  18. <Link to={to}>{title}</Link>
  19. </li>
  20. const Menu = ({menuItems=defaultMenuItems}) =>
  21. <nav>
  22. <ul>
  23. {menuItems.map(item => <MenuItem {...item} />)}
  24. </ul>
  25. </nav>
  26. const Header = () =>
  27. <header>
  28. <Logo />
  29. <Menu />
  30. </header>
  31. const Footer = () =>
  32. <footer>
  33. <Logo />
  34. <Route path='/' exact>
  35. вариация футера на главной
  36. </Route>
  37. </footer>
  38. const Login = () => {
  39. const [login, setLogin] = useState('')
  40. const [password, setPassword] = useState('')
  41. return (
  42. <div className="Login">
  43. <input type='text'
  44. onChange={e => setLogin(e.target.value)}
  45. value={login} />
  46. <input type='password'
  47. onChange={e => setPassword(e.target.value)}
  48. value={password} />
  49. <button disabled={!login || !password}>Login...</button>
  50. </div>
  51. )
  52. }
  53. const Home = () =>
  54. <div className="Home">
  55. <h1>
  56. Главная нашего супер-пупер сайта
  57. </h1>
  58. </div>
  59. const About = () =>
  60. <div className="About">
  61. <h1>
  62. О нас
  63. </h1>
  64. <p>
  65. тили тили трали вали
  66. <img src={logo}/>
  67. </p>
  68. </div>
  69. const Add = ({match:{params: {a,b}}}) =>
  70. <pre>
  71. {a} + {b} = {+a + +b}
  72. </pre>
  73. const Main = () =>
  74. <main>
  75. <Route path='/' component={Home} exact/>
  76. <Route path='/about' component={About} exact/>
  77. <Route path='/login' component={Login} exact/>
  78. <Route path='/add/:a/:b' component={Add} exact/>
  79. </main>
  80. const App = () =>
  81. <Router history={createHistory()}>
  82. <Header />
  83. <Main />
  84. <Footer />
  85. </Router>
  86. export default App;