___App.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import logo from './logo.svg';
  2. import {useState} from 'react';
  3. import './App.css';
  4. const Logo = () => {
  5. return <>
  6. <span style={{color: Math.random() > 0.5 ? 'red' : 'green'}}>TEXT</span>
  7. <img src={logo} alt="logo" className="App-logo"/>
  8. </>
  9. }
  10. const NavItem = ({text, url}) =>
  11. <li><a href={url}>{text.toUpperCase() + Math.random()}</a></li>
  12. const Nav = () =>
  13. <ul>
  14. <NavItem url="/" text="Главная"/>
  15. <NavItem url="/aboutus" text="О нас" />
  16. <NavItem url="/contacts" text="Контакты" />
  17. </ul>
  18. const GoodCard = ({title='NoName',
  19. url='#',
  20. img='https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png',
  21. children}) => //title, url - объявление переменных. После `=` - значение по умолчанию
  22. <div className='GoodCard'>
  23. <h2>{title}</h2>
  24. <a href={url}>
  25. <img src={img} />
  26. </a>
  27. <p>
  28. {children}
  29. </p>
  30. </div>
  31. const Header = () =>
  32. <header className="App-header">
  33. <Logo />
  34. <Nav></Nav>
  35. </header>
  36. const Content = () =>
  37. <>
  38. <GoodCard title='Пиво'
  39. url="https://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D0%B2%D0%BE"
  40. img="https://m.dom-eda.com/uploads/images/catalog/item/cbb4387631/07042d6ed6_1000.jpg">
  41. пей пиво <strong>пенное</strong> и все такое
  42. </GoodCard>
  43. <GoodCard title="ЕстьName" children="задаю children как атрибут"/>
  44. <GoodCard title="ЕстьName">
  45. задаю children как атрибут
  46. </GoodCard>
  47. </>
  48. const Counter = () => {
  49. const [counter, setCounter] = useState(1)
  50. console.log('ПЕРЕЗАПУСК КОМПОНЕНТА', counter)
  51. return (
  52. <button style={{fontSize: `${counter/10}em`}}
  53. onClick={() => setCounter(counter +1)}>{counter}</button>
  54. )
  55. }
  56. const Input = () => {
  57. const [text, setText] = useState('')
  58. console.log('ИНПУТ ПЕРЕЗАПУСТИЛСЯ', text)
  59. return (
  60. <div>
  61. <input value={text}
  62. onChange={e => setText(e.target.value)}
  63. type="text"/>
  64. <ShowFun text={text} onReset={() => setText('')}/>
  65. </div>
  66. )
  67. }
  68. const ShowFun = ({text, onReset}) =>
  69. <div style={{color: text.length > 10 ? 'red': 'green'}}
  70. onClick={onReset}>
  71. {text}
  72. </div>
  73. const LoginForm = ({onLogin}) => {
  74. //придумать пару стейтов для двух инпутов
  75. //сделать так, что бы кнопка была disabled когда login или пароль
  76. //слишком короткие
  77. //запустить onLogin по клику
  78. return (
  79. <div>
  80. <input placeholder='Login'/>
  81. <input placeholder='Password'/>
  82. <button>Login...</button>
  83. </div>
  84. )
  85. }
  86. function App() {
  87. return (
  88. <div className="App">
  89. <LoginForm onLogin={({login, password}) => console.log('ЛОГИН И ПАРОЛЬ', login, password)}/>
  90. <Input/>
  91. <Input/>
  92. <Counter />
  93. <Counter />
  94. </div>
  95. );
  96. }
  97. export default App;