10.生命周期.html 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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">
  13. </div>
  14. <script type="text/babel">
  15. const root = ReactDOM.createRoot(document.getElementById("root"));
  16. function App () {
  17. return <Good/>
  18. }
  19. class Good extends React.Component {
  20. // 构造器 this.state 赋值对象 为事件处理函数绑定实例
  21. // state 可以修改
  22. constructor(props) {
  23. super(props);
  24. this.state = {
  25. now: new Date()
  26. };
  27. }
  28. componentDidMount() {
  29. // 挂载 会在组件挂载后进行使用
  30. console.log("1");
  31. this.timer = setInterval(()=>{
  32. // 在React中 更新状态的唯一方式:调用组件实例setState方法
  33. // setState方法在修改状态的时候 就是新值与旧值合并 相同属性再覆盖掉旧的状态
  34. this.setState({
  35. now:new Date()
  36. })
  37. },1000)
  38. }
  39. componentDidUpdate(prevProps, prevState, snapshot) {
  40. // 更新 会在组件更新后调用 首次渲染不执行次方法
  41. console.log("2",prevProps, prevState, snapshot)
  42. }
  43. componentWillUnmount() {
  44. // 卸载 会在组件卸载及销毁之前调用
  45. console.log("3")
  46. clearInterval(this.timer)
  47. }
  48. static getDerivedStateFromProps(props, state) {
  49. // 会在初始挂载和后续更新时调用 render 之前调用它
  50. // 它应该返回一个对象来更新 state,或者返回 null 就不更新任何内容
  51. console.log("4",props, state)
  52. }
  53. getSnapshotBeforeUpdate(prevProps, prevState){
  54. // 会在 React 更新 DOM 之前时直接调用它
  55. console.log("5",prevProps, prevState)
  56. return 12;
  57. }
  58. render() { // 是类组件中唯一必须实现的方法
  59. console.log("你好")
  60. return (
  61. <div>
  62. <h1>现在是{this.state.now.toUTCString()}</h1>
  63. </div>
  64. )
  65. }
  66. }
  67. root.render(<App/>);
  68. </script>
  69. </body>
  70. </html>