8.state.html 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. <script src="./babel.min.js"></script>
  8. <script src="./react.development.js"></script>
  9. <script src="./react-dom.development.js"></script>
  10. </head>
  11. <body>
  12. <div id="root"></div>
  13. <script type="text/babel">
  14. // 类组件 state 可以修改数据
  15. // 计数器
  16. class White extends React.Component {
  17. // 定义初始数值
  18. state = {
  19. title: "计数器",
  20. count: 0,
  21. };
  22. // constructor() {
  23. // super(props),
  24. // state={
  25. // }
  26. // }
  27. // 数据更新视图未变
  28. // vue解决方案:Vue.set() this.$set
  29. // react解决方案:
  30. handleAdd() {
  31. this.setState({
  32. count: this.state.count + 1,
  33. });
  34. console.log(this.state, "加法");
  35. }
  36. handleReduce = () => {
  37. console.log(this)
  38. this.setState({
  39. count: this.state.count - 1,
  40. });
  41. };
  42. render() {
  43. return (
  44. <div>
  45. <h2>{this.state.title}</h2>
  46. <p>当前数值:{this.state.count}</p>
  47. <button onClick={this.handleAdd.bind(this)}>+</button>
  48. <button onClick={this.handleReduce}>-</button>
  49. </div>
  50. );
  51. }
  52. }
  53. let element = <White />;
  54. ReactDOM.createRoot(document.querySelector("#root")).render(element);
  55. </script>
  56. </body>
  57. </html>