4.事件处理.html 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <title></title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <!-- 将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. <div id="btn">这是一个按钮</div>
  17. <!-- type="text/babel"
  18. 告诉babel库 将jsx转成js
  19. this指向:
  20. 方法中 this指向当前标签
  21. 改变this指向方法
  22. 1.bind
  23. 2.箭头函数 ()=>{}
  24. -->
  25. <script type="text/babel">
  26. function onClick(){
  27. console.log(this)
  28. }
  29. function handleClick1(e){
  30. console.log(this,'正常') // undefined
  31. console.log(e,'事件') //存在事件对象
  32. }
  33. // 解构接受参数
  34. function handleClick2(e,...user){
  35. console.log(e.target)
  36. console.log(...user)
  37. }
  38. function handleClick3(e){
  39. console.log(e)
  40. // console.log(id)
  41. }
  42. // 第一种
  43. document.getElementById("btn").onclick = onClick;
  44. var aaaa = {name:"My name is Tutu"};
  45. // 改变this指向:call bind apply
  46. // 第二种
  47. // let element = <div onClick={onClick.bind(aaaa)}>这是第二个按钮</div>
  48. let element = (
  49. <div>
  50. <p onClick={handleClick1.bind(aaaa)}>事件1</p>
  51. {/*套壳*/}
  52. <p onClick={(e)=>{
  53. handleClick2(e,3,444,5555)
  54. }}>事件2</p>
  55. {/*
  56. 传递多个参数时 接收参数需要解构
  57. */}
  58. <p onClick={handleClick3.bind(null,44,55)}>事件3</p>
  59. {/* null不占位 */}
  60. </div>
  61. )
  62. {/*
  63. 默认传递事件对象
  64. bind虽然可以改变this指向 但是位置固定并不灵活
  65. 箭头函数 可以套壳比较灵活
  66. **/}
  67. let newPage = ReactDOM.createRoot(document.querySelector("#root"));
  68. newPage.render(element)
  69. </script>
  70. </body>
  71. </html>