Răsfoiți Sursa

React:条件渲染&列表渲染

大侠 2 ani în urmă
părinte
comite
f60331c213

+ 73 - 0
15_React/day-2/code/5.条件渲染.html

@@ -0,0 +1,73 @@
+<!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>条件渲染</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">
+      function App() {
+        return (
+          <div className="app">
+            <div className="app-header">
+              {/* <LoginTpl user={{ name: '大侠' }} /> */}
+              <LoginTpl />
+            </div>
+          </div>
+        );
+      }
+
+      // function LoginTpl({ user }) {
+      //   return user ? (
+      //     <span>您好,{user.name} </span>
+      //   ) : (
+      //     <span>
+      //       您好,请登录。<button>登录</button>
+      //     </span>
+      //   );
+      // }
+
+      class LoginTpl extends React.Component {
+        constructor() {
+          super();
+          const token = sessionStorage.getItem('token');
+          this.state = {
+            token,
+            user: token ? JSON.parse(sessionStorage.getItem('user')) : {},
+          };
+
+          this.onLogin = this.onLogin.bind(this);
+        }
+        onLogin() {
+          sessionStorage.setItem('token', '123456');
+          sessionStorage.setItem('user', JSON.stringify({ name: 'daxia' }));
+
+          this.setState({
+            token: '123456',
+            user: { name: 'daxia' },
+          });
+        }
+
+        render() {
+          let { token, user } = this.state;
+          return token ? (
+            <span>您好,{user.name} </span>
+          ) : (
+            <span>
+              您好,请登录。<button onClick={this.onLogin}>登录</button>
+            </span>
+          );
+        }
+      }
+
+      const root = ReactDOM.createRoot(document.querySelector('#root'));
+      root.render(<App />);
+    </script>
+  </body>
+</html>

+ 64 - 0
15_React/day-2/code/6.列表渲染.html

@@ -0,0 +1,64 @@
+<!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>列表渲染</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">
+      function App() {
+        return (
+          <div className="app">
+            <MyList />
+          </div>
+        );
+      }
+
+      class MyList extends React.Component {
+        constructor() {
+          super();
+          this.state = {
+            list: [1, 2, 3, 4],
+          };
+        }
+
+        render() {
+          let { list } = this.state;
+          // 期望
+          // let element = (
+          //   <ul>
+          //     <li>1</li>
+          //     <li>2</li>
+          //     <li>3</li>
+          //     <li>4</li>
+          //   </ul>
+          // );
+
+          // let element = (
+          //   <ul>
+          //     {/* 直接渲染数组 数据 会发生什么?*/}
+          //     <li>{list}</li>
+          //     {/* <li>{{ name: 'gg' }}</li> */}
+          //   </ul>
+          // );
+          // let ml = [<li>1</li>, <li>2</li>, <li>3</li>, <li>4</li>];
+          // list = [1, 2,3,4]
+          // 思考 list => ml ?
+
+          let ml = list.map((item, index) => <li key={index}>{item}</li>);
+
+          return <ul>{ml}</ul>;
+        }
+      }
+
+      const root = ReactDOM.createRoot(document.querySelector('#root'));
+      root.render(<App />);
+    </script>
+  </body>
+</html>