8_jsx-事件处理4.html 2.0 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. <!-- 引入文件 *顺序不能改变-->
  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. <div id="btn">这是一个按钮</div>
  18. <script type="text/babel">
  19. function onClick() {
  20. console.log(this)
  21. }
  22. function handleClick1(e) {
  23. console.log(this, '正常') //undefined
  24. console.log(e, '事件') //存在事件对象
  25. }
  26. // 解构接受参数
  27. function handleClick2(e, ...user) {
  28. console.log(e.target)
  29. console.log(...user)
  30. }
  31. function handleClick3(e) {
  32. console.log(e)
  33. // console.log(id)
  34. }
  35. document.getElementById("btn").onclick = onClick;
  36. var aaa = { name: "My name is dage" };
  37. // 改变this指向:call bind apply
  38. // 第二种
  39. // let element = <div onClick={onClick.bind(aaa)}>这是第二个按钮</div>
  40. let element = (
  41. <div>
  42. <p onClick={handleClick1.bind(aaa)}>事件1</p>
  43. {/*套壳*/}
  44. <p onClick={(e)=>{
  45. handleClick2(e,3,444,555)
  46. }}>事件2</p>
  47. <p onClick={handleClick3.bind(null, 444)}>事件3</p>
  48. {/*null不占位*/}
  49. </div>
  50. )
  51. let newPage = ReactDOM.createRoot(document.querySelector("#root"));
  52. newPage.render(element)
  53. {/**
  54. 默认传递事件对象
  55. bind虽然可以改变this指向 但是位置固定并不灵活
  56. 箭头函数 可以套壳比较灵活
  57. */}
  58. </script>
  59. </body>
  60. </html>