App.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import React, { Component } from "react";
  2. import Counter from "./counter";
  3. import List from "./select";
  4. const fakeArr = [
  5. { id: 0, value: 0, text: "Text 1" },
  6. { id: 1, value: 1, text: "Text 2" },
  7. { id: 2, value: 2, text: "Text 3" },
  8. { id: 3, value: 3, text: "Text 4" }
  9. ];
  10. export default class App extends Component {
  11. constructor(props) {
  12. super(props);
  13. // console.log("constructor");
  14. this.state = {
  15. counter: 0,
  16. id: null,
  17. time: new Date().toLocaleTimeString(),
  18. random: 0,
  19. value: "Hello",
  20. textareaValue: "",
  21. checked: false,
  22. valueForSelect: 0,
  23. fakeArr: fakeArr,
  24. valueForList: fakeArr[0].value
  25. };
  26. this.handleChange = this.handleChange.bind(this);
  27. }
  28. tick = () => this.setState({ time: new Date().toLocaleTimeString() });
  29. // UNSAFE_componentWillMount() {
  30. // console.log("componentWillMount");
  31. // }
  32. static getDerivedStateFromProps(nextProps, prevState) {
  33. // console.log("getDerivedStateFromProps");
  34. return null;
  35. }
  36. async componentDidMount() {
  37. // console.log("componentDidMount");
  38. const id = setInterval(this.tick, 1000);
  39. console.log("id", id);
  40. this.setState({ id });
  41. }
  42. componentWillUnmount() {
  43. // console.log("componentWillUnmount");
  44. clearInterval(this.state.id);
  45. }
  46. shouldComponentUpdate(nextProps, nextState, nextContext) {
  47. // console.log("shouldComponentUpdate");
  48. return true;
  49. }
  50. getSnapshotBeforeUpdate(prevProps, prevState) {
  51. // console.log("getSnapshotBeforeUpdate");
  52. return null;
  53. }
  54. async componentDidUpdate(prevProps, prevState, snapshot) {
  55. // console.log("componentDidUpdate");
  56. // if (prevState.counter !== this.state.counter) {
  57. // console.log("random");
  58. // this.random();
  59. // }
  60. }
  61. inc = () =>
  62. this.setState(prevState => ({
  63. counter: this.random() === 5 ? prevState.counter * 2 : prevState.counter + 1
  64. }));
  65. dec = () => this.setState(prevState => ({ counter: prevState.counter - 1 }));
  66. random = () => this.setState({ random: Math.floor(Math.random() * 10 + 1) });
  67. random = () => Math.floor(Math.random() * 10 + 1);
  68. handleChange(e) {
  69. this.setState({ value: e.target.value });
  70. }
  71. onBlur = e => console.log("onBlur");
  72. onFocus = e => console.log("onFocus");
  73. handleChangeTA = e => this.setState({ textareaValue: e.target.value });
  74. handleChangeCH = e => this.setState({ checked: e.target.checked });
  75. handleSelectChange = e => this.setState({ valueForSelect: e.target.value });
  76. changeListValue = id =>
  77. this.setState(prevState => ({
  78. ...prevState,
  79. valueForList: prevState.fakeArr.find(el => el.value === id).value
  80. }));
  81. render() {
  82. console.log("random", this.state.random);
  83. return (
  84. <div>
  85. <input
  86. type="text"
  87. onBlur={this.onBlur}
  88. onFocus={this.onFocus}
  89. value={this.state.value}
  90. onChange={this.handleChange}
  91. />
  92. <textarea value={this.state.textareaValue} onChange={this.handleChangeTA} />
  93. <input type="checkbox" checked={this.state.checked} onChange={this.handleChangeCH} />
  94. <div>
  95. <p>Ваш выбор: {this.state.valueForSelect}</p>
  96. <select value={this.state.valueForSelect} onChange={this.handleSelectChange}>
  97. <option value="0">Язык HTML</option>
  98. <option value="1">Язык CSS</option>
  99. <option value="2">Язык JavaScript</option>
  100. <option value="3">Язык PHP</option>
  101. </select>
  102. </div>
  103. <input type="file" onChange={e => console.log("e", e.target.files)} />
  104. <div>
  105. <List
  106. options={this.state.fakeArr}
  107. value={this.state.valueForList}
  108. onChange={this.changeListValue}
  109. />
  110. </div>
  111. </div>
  112. );
  113. }
  114. }