App.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import React, { useState } from "react";
  2. import './App.css';
  3. const Spoiler = ({header = <button>Жми на меня</button>, open, children}) => {
  4. const [openOpen, setOpen] = useState(open)
  5. return(
  6. <div>
  7. <div onClick ={ () => {
  8. setOpen(!openOpen)
  9. }}>
  10. <p>
  11. {header}
  12. </p>
  13. {openOpen && (
  14. <div>
  15. {children}
  16. </div>
  17. )}
  18. </div>
  19. </div>
  20. )
  21. }
  22. const HideSpoiler = () => {
  23. return(
  24. <div>
  25. <Spoiler header={<h1>Заголовок</h1>} open>
  26. Контент 1
  27. <p>
  28. Тут текст который виден всегда!
  29. </p>
  30. </Spoiler>
  31. <Spoiler>
  32. <h2>Контент 2</h2>
  33. <p>
  34. Этот текст появляется при нажатии на кнопку!
  35. </p>
  36. </Spoiler>
  37. </div>
  38. )
  39. }
  40. const RangeInput = ({min,max}) =>{
  41. const [amountSymbol, setAmountSymbol] = useState('')
  42. return(
  43. <div>
  44. <input type = 'text'
  45. style ={{ background: amountSymbol.length < min || amountSymbol.length > max ? 'red' : null }}
  46. value = {amountSymbol}
  47. onChange={(e) => setAmountSymbol(e.target.value)}
  48. />
  49. </div>
  50. )
  51. }
  52. const PasswordConfirm = ({min}) => {
  53. const [passwordInput1, setPasswordInput1] = useState('')
  54. const [passwordInput2, setPasswordInput2] = useState('')
  55. // const Examination = () => {
  56. // if(passwordInput1 === passwordInput2){
  57. // if(passwordInput1.length > min && passwordInput2.length > min){
  58. // if(passwordInput1.match(/^[A-Za-z]/) && passwordInput2.match(/^[A-Za-z]/)){
  59. // return true
  60. // }
  61. // }
  62. // }
  63. // else{
  64. // return false
  65. // }
  66. // }
  67. return(
  68. <div>
  69. <input className='inp' type = "password"
  70. style = {{background: (passwordInput1 === passwordInput2) && (passwordInput1.length > min && passwordInput2.length > min) && (passwordInput1.match(/^[A-Za-z]/) && passwordInput2.match(/^[A-Za-z]/)) ? 'green':null}}
  71. value = {passwordInput1}
  72. onChange = {(e) => setPasswordInput1(e.target.value)}
  73. // onInput = {Examination}
  74. />
  75. <input className= 'inp' type = "password"
  76. style = {{background: (passwordInput1 === passwordInput2) && (passwordInput1.length > min && passwordInput2.length > min) && (passwordInput1.match(/^[A-Za-z]/) && passwordInput2.match(/^[A-Za-z]/)) ? 'green':null}}
  77. value = {passwordInput2}
  78. onChange = {(e) => setPasswordInput2(e.target.value)}
  79. // onInput = {Examination}
  80. />
  81. </div>
  82. )
  83. }
  84. function App() {
  85. return (
  86. <div className="App">
  87. <HideSpoiler></HideSpoiler>
  88. <RangeInput min={2} max={10} />
  89. <PasswordConfirm min={2} />
  90. </div>
  91. );
  92. }
  93. export default App;