5.条件渲染.html 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>条件渲染</title>
  8. <script src="../../babel.min.js"></script>
  9. <script src="../../react.development.js"></script>
  10. <script src="../../react-dom.development.js"></script>
  11. </head>
  12. <body>
  13. <div id="root"></div>
  14. <script type="text/babel">
  15. function App() {
  16. return (
  17. <div className="app">
  18. <div className="app-header">
  19. {/* <LoginTpl user={{ name: '大侠' }} /> */}
  20. <LoginTpl />
  21. </div>
  22. </div>
  23. );
  24. }
  25. // function LoginTpl({ user }) {
  26. // return user ? (
  27. // <span>您好,{user.name} </span>
  28. // ) : (
  29. // <span>
  30. // 您好,请登录。<button>登录</button>
  31. // </span>
  32. // );
  33. // }
  34. class LoginTpl extends React.Component {
  35. constructor() {
  36. super();
  37. const token = sessionStorage.getItem('token');
  38. this.state = {
  39. token,
  40. user: token ? JSON.parse(sessionStorage.getItem('user')) : {},
  41. };
  42. this.onLogin = this.onLogin.bind(this);
  43. }
  44. onLogin() {
  45. sessionStorage.setItem('token', '123456');
  46. sessionStorage.setItem('user', JSON.stringify({ name: 'daxia' }));
  47. this.setState({
  48. token: '123456',
  49. user: { name: 'daxia' },
  50. });
  51. }
  52. render() {
  53. let { token, user } = this.state;
  54. return token ? (
  55. <span>您好,{user.name} </span>
  56. ) : (
  57. <span>
  58. 您好,请登录。<button onClick={this.onLogin}>登录</button>
  59. </span>
  60. );
  61. }
  62. }
  63. const root = ReactDOM.createRoot(document.querySelector('#root'));
  64. root.render(<App />);
  65. </script>
  66. </body>
  67. </html>