12.this指向.html 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. <!-- jsx 语法浏览器不识别 jsx => js 浏览器可识别的语言 -->
  8. <script src="./babel.min.js"></script>
  9. <!-- react的核心库 -->
  10. <script src="./react.development.js"></script>
  11. <!-- 解析react中的dom库 -->
  12. <script src="./react-dom.development.js"></script>
  13. </head>
  14. <body>
  15. <div id="root"></div>
  16. <script type="text/babel">
  17. let root = ReactDOM.createRoot(document.getElementById("root"));
  18. /**
  19. * 1.监听器this 实际开发 类组件中
  20. * 2.类组件 绑定事件 this.xxx 此时 this指向undefined
  21. * 3.修改this指向:bind apply call
  22. */
  23. function News() {
  24. return (
  25. <button
  26. onClick={() => {
  27. let flower = "牡丹";
  28. flower = "芍药";
  29. console.log("点击", flower);
  30. }}
  31. >
  32. 按钮
  33. </button>
  34. );
  35. }
  36. class Main extends React.Component {
  37. constructor() {
  38. super();
  39. this.state = {
  40. hi: "哈哈哈哈",
  41. aa: "小明",
  42. };
  43. this.handleClick = this.handleClick.bind(this);
  44. }
  45. handleClick() {
  46. // this.state.aa = '小红'
  47. this.setState({
  48. aa: "小红",
  49. });
  50. // 修改this指向:bind apply call
  51. console.log(this, "指向");
  52. }
  53. render() {
  54. return (
  55. <div>
  56. <p onClick={this.handleClick}>{this.state.aa}</p>
  57. {/*
  58. <p onClick={this.handleClick.bind(this)}>{this.state.aa}</p>
  59. */}
  60. <p
  61. onClick={() => {
  62. this.state.hi = "嘿嘿嘿";
  63. this.setState({
  64. hi: "嘿嘿嘿",
  65. });
  66. console.log(this, "休息休息");
  67. }}
  68. >
  69. {this.state.hi}
  70. </p>
  71. </div>
  72. );
  73. }
  74. }
  75. root.render(<Main />);
  76. </script>
  77. </body>
  78. </html>