7.state.html 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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 MyCom extends React.Component {
  17. // 定义初始数值
  18. state = {
  19. count : 0,
  20. title : "计数器"
  21. }
  22. // 旧版本的定义方法
  23. // constructor(){
  24. // super(props)
  25. // state = {
  26. // }
  27. // }
  28. // 数据更新视图未改变
  29. // vue的解决方法 使用 Vue.set 或者 this.$set
  30. // react的解决方法 使用 this.setState({})
  31. // 类组件中 方法无需使用function关键字直接写即可
  32. handlerAdd(){
  33. // console.log(this)
  34. this.setState({
  35. count: this.state.count + 1
  36. })
  37. }
  38. handlerReduce=()=>{
  39. // console.log(this)
  40. this.setState({
  41. count: this.state.count - 1
  42. })
  43. }
  44. render(){
  45. return (
  46. <div>
  47. <p>{this.state.title}</p>
  48. <p>当前数值:{this.state.count}</p>
  49. <button onClick={this.handlerAdd.bind(this)}>+</button>
  50. <button onClick={this.handlerReduce}>-</button>
  51. </div>
  52. )
  53. }
  54. }
  55. let element = <MyCom/>
  56. ReactDOM.createRoot(document.getElementById('root')).render(element)
  57. </script>
  58. </body>
  59. </html>