App.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import './App.scss';
  2. import React, { useState } from 'react';
  3. const Spoiler = ({header="+", open, children}) => {
  4. let [touch, setTouch]=useState(open);
  5. const onClick = () => {
  6. setTouch(!touch);
  7. }
  8. return (
  9. <div onClick={onClick}>
  10. { header }
  11. { touch? children : null }
  12. </div>
  13. )
  14. }
  15. class RangeInput extends React.Component {
  16. constructor (props) {
  17. super(props);
  18. this.state = {
  19. min: this.props.min,
  20. max: this.props.max,
  21. }
  22. }
  23. changeColor = (e) => {
  24. const lengthStr = e.target.value.length;
  25. this.setState( () => ({ value: lengthStr}));
  26. }
  27. render() {
  28. return <input type="text" onChange = {this.changeColor}
  29. style={{background: this.state.max < this.state.value || this.state.value < this.state.min ? 'red':'white'}}>
  30. </input>
  31. }
  32. }
  33. class PasswordConfirm extends React.Component {
  34. constructor (props) {
  35. super(props);
  36. this.state = {
  37. min: this.props.min,
  38. }
  39. }
  40. changeLogin = (e) => {
  41. const lengthStr = e.target.value.length;
  42. this.setState( () => ({
  43. lengthLogin: lengthStr,
  44. login: e.target.value,
  45. }));
  46. }
  47. changePassword = (e) => {
  48. const lengthStr = e.target.value.length;
  49. this.setState( () => ({
  50. lengthPassword: lengthStr,
  51. password: e.target.value}));
  52. }
  53. render() {
  54. return (
  55. <div className="password" style={{background: this.state.login === this.state.password
  56. && this.state.lengthLogin > this.state.min
  57. && this.state.lengthPassword > this.state.min? 'green':'white'}}>
  58. <input type="password" onChange = {this.changeLogin}
  59. style={{background: this.state.lengthLogin < this.state.min ? 'red':'white'}}>
  60. </input>
  61. <input type="password" onChange = {this.changePassword}
  62. style={{background: this.state.lengthPassword < this.state.min ? 'red':'white'}}>
  63. </input>
  64. </div>
  65. )
  66. }
  67. }
  68. function App() {
  69. return (
  70. <div>
  71. <div className="App">
  72. <Spoiler header={<h1>Заголовок</h1>} open>
  73. Контент 1
  74. <p>
  75. лорем ипсум траливали и тп.
  76. </p>
  77. </Spoiler>
  78. </div>
  79. <RangeInput min={2} max={10} />
  80. <PasswordConfirm min={2} />
  81. </div>
  82. );
  83. }
  84. export default App;