12_state.html 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. <!-- 引入文件 *顺序不能改变-->
  8. <!-- 将jsx转为js -->
  9. <script src="./babel.min.js"></script>
  10. <!-- react核心库 -->
  11. <script src="./react.development.js"></script>
  12. <!-- react中的dom操作库 -->
  13. <script src="./react-dom.development.js"></script>
  14. </head>
  15. <body>
  16. <div id="root"></div>
  17. <script type="text/babel">
  18. // 类组件 state 可以修改数据
  19. // 计数器
  20. class HandleCount extends React.Component {
  21. // 定义初始数值
  22. state = {
  23. title: "计数器",
  24. count: 0,
  25. };
  26. // 数据更新视图未变
  27. //vue的解决方案:vue.set() 或 this.$set
  28. // react解决方案:
  29. handleAdd() {
  30. this.setState({
  31. count:this.state.count + 1,
  32. });
  33. }
  34. handleReduce = ()=>{
  35. console.log(this)
  36. this.setState({
  37. count:this.state.count -1,
  38. });
  39. }
  40. render() {
  41. return (
  42. <div>
  43. <h1>{this.state.title}</h1>
  44. <p>当前数值:{this.state.count}</p>
  45. <button onClick={this.handleAdd.bind(this)}>+</button>
  46. <button onClick={this.handleReduce}>-</button>
  47. </div>
  48. )
  49. }
  50. }
  51. let element = <HandleCount/>
  52. ReactDOM.createRoot(document.querySelector("#root")).render(element);
  53. </script>
  54. </body>
  55. </html>