3.state.html 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Document</title>
  8. <script src="../react.development.js"></script>
  9. <script src="../react-dom.development.js"></script>
  10. <script src="../babel.min.js"></script>
  11. </head>
  12. <body>
  13. <div id="root"></div>
  14. <script type="text/babel">
  15. class Greeting extends React.Component {
  16. render() {
  17. return (
  18. <div>
  19. <h3>你好,兄弟!</h3>
  20. </div>
  21. );
  22. }
  23. }
  24. class Counter extends React.Component {
  25. // 添加状态
  26. // 写法-1
  27. state = {
  28. name: '计数器',
  29. count: 0, // 定义一个计数的状态值
  30. };
  31. // 写法-2
  32. // constructor(props) {
  33. // super(props); // 在继承关系中,下面代码要使用this 的话 必须先调用super父类的构造器才可以
  34. // this.state = {};
  35. // }
  36. // 像vue那样 定义实例方法来作为事件监听器
  37. // 2 修改状态:一定要保证其响应式,那么只能通过 组件实例的setState方法
  38. reduceOne() {
  39. // console.log(this);
  40. // 类Vue,如果直接修改state可以吗?
  41. // this.state.count--;// wrong
  42. // 正确做法
  43. this.setState({
  44. count: this.state.count - 1,
  45. });
  46. }
  47. addOne = () => {
  48. // console.log(this);
  49. this.setState({
  50. count: this.state.count + 1,
  51. });
  52. };
  53. render() {
  54. // 1 在类组件中 通过this先拿到组件实例,然后通过访问state属性得到所有的状态。
  55. return (
  56. <div>
  57. <h3>{this.state.name}</h3>
  58. <p>当前值:{this.state.count}</p>
  59. <p>
  60. <button onClick={this.reduceOne.bind(this)}>-</button>
  61. <button onClick={this.addOne}>+</button>
  62. </p>
  63. </div>
  64. );
  65. }
  66. }
  67. let element = <Counter />; // 将组件 => jsx(React元素)
  68. ReactDOM.createRoot(document.querySelector('#root')).render(element);
  69. </script>
  70. </body>
  71. </html>