Browse Source

React:jsx组件props&state&生命周期

大侠 2 năm trước cách đây
mục cha
commit
44fe23c708

+ 53 - 0
15_React/day-1/code/7.组件传参.html

@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Document</title>
+    <script src="../../babel.min.js"></script>
+    <script src="../../react.development.js"></script>
+    <script src="../../react-dom.development.js"></script>
+  </head>
+  <body>
+    <div id="root"></div>
+    <script type="text/babel">
+      const root = ReactDOM.createRoot(document.querySelector('#root'));
+
+      function App() {
+        var username = '郭郭';
+        return (
+          <div>
+            <Greeting name={username} age={18} />
+            {/* 组件复用 */}
+            <Greeting name={'容嬷嬷'} age={19} />
+          </div>
+        );
+      }
+      // 就是组件在渲染时绑定的所有属性 类型=> object{name: '大侠', age: 18}
+      // function Greeting(props) {
+      //   return <h3>你好,{props.name}</h3>;
+      // }
+
+      // function Greeting(props) {
+      //   //
+      //   // props.name = '大侠'; // 从js角度看 修改props操作是可以的。
+      //   // 但是 在 React组件中 是不可以 修改props的。即 props是只读的
+      //   return <h3>你好,{props.name}</h3>;
+      // }
+      // ==== 类组件中 使用props ====
+      class Greeting extends React.Component {
+        render() {
+          return (
+            <div>
+              <h3>你好,{this.props.name}</h3>
+              <p>今年我已经 {this.props.age} 岁。</p>
+            </div>
+          );
+        }
+      }
+
+      root.render(<App />);
+    </script>
+  </body>
+</html>

+ 44 - 0
15_React/day-1/code/8.组件状态.html

@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Document</title>
+    <script src="../../babel.min.js"></script>
+    <script src="../../react.development.js"></script>
+    <script src="../../react-dom.development.js"></script>
+  </head>
+  <body>
+    <div id="root"></div>
+    <script type="text/babel">
+      const root = ReactDOM.createRoot(document.querySelector('#root'));
+
+      class Counter extends React.Component {
+        // 给类组件添加状态
+        constructor(props) {
+          // 通过this访问当前创建的实例,但是 一定要 在调用super函数后才可使用this
+          super(props);
+          this.state = {
+            c: 0,
+          }; // 组件的自身状态 (类比 Vue组件的data属性)
+        } // 构造器函数 用于给实例初始化的
+
+        render() {
+          // 获取 状态 通过 this组件实例的state属性
+          return (
+            <div>
+              <p>当前计数:{this.state.c}</p>
+              <p>
+                <button>-</button>
+                <button>+</button>
+              </p>
+            </div>
+          );
+        }
+      }
+
+      root.render(<Counter />);
+    </script>
+  </body>
+</html>

+ 50 - 0
15_React/day-1/code/9.组件生命周期.html

@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Document</title>
+    <script src="../../babel.min.js"></script>
+    <script src="../../react.development.js"></script>
+    <script src="../../react-dom.development.js"></script>
+  </head>
+  <body>
+    <div id="root"></div>
+    <script type="text/babel">
+      const root = ReactDOM.createRoot(document.querySelector('#root'));
+
+      class Clock extends React.Component {
+        constructor(props) {
+          super(props);
+          this.state = {
+            now: new Date(),
+          };
+        }
+
+        // 给组件添加生命周期 就是给组件实例添加对应钩子方法即可
+        componentDidMount() {
+          this.timer = setInterval(() => {
+            // 更新状态 now
+            // 在React中 响应式的更新状态的 唯一方式:调用组件实例的setState方法。setState方法在修改状态的时候 就是 新值 与 旧值合并后再覆盖掉旧状态
+            this.setState({ now: new Date() });
+          }, 1000);
+        }
+
+        componentDidUpdate() {
+          console.log('comp updated');
+        }
+
+        componentWillUnmount() {
+          clearInterval(this.timer);
+        }
+
+        render() {
+          return <h3>当前时间为:{this.state.now.toLocaleString()}</h3>;
+        }
+      }
+
+      root.render(<Clock />);
+    </script>
+  </body>
+</html>