• react基础知识,jsx规则,组件定义


    react是一个将数据转换为html的js库

    react英文官网:https://reactjs.org

    react中文官网:https://react.docschina.org

    用react渲染一段文字

    <!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>hello-react</title>
    </head>
    <body>
      <!-- 准备一个容器 -->
      <div id="test"></div>
      <!-- 引入react核心库 -->
      <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.min.js"></script>
      <!-- 引入react-dom, 用于支持react操作dom, 需要在核心库之后引入 -->
      <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.min.js"></script>
      <!-- 引入babel.js,用于将jsx转化为js -->
      <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.18.7/babel.min.js"></script>
    
      <script type="text/babel">/* 此处一定要写babel   jsx */
        // 1.创建虚拟dom
        const VDOM = <h1>hello, react</h1> /* 此处不要写引号,因为不是字符串 */
        // 2.渲染虚拟dom到页面
        ReactDOM.render(VDOM, document.getElementById('test'))
      </script>
    </body>
    </html>

     用js创建虚拟dom(React.createElement);jsx其实是这种语法的语法糖,jsx会帮我们转换成以下代码,创建虚拟dom。

    <!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>使用js创建虚拟dom</title>
    </head>
    <body>
      <!-- 准备一个容器 -->
      <div id="test"></div>
      <!-- 引入react核心库 -->
      <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.min.js"></script>
      <!-- 引入react-dom, 用于支持react操作dom, 需要在核心库之后引入 -->
      <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.min.js"></script>
    
      <script type="text/javascript">
        // 1.创建虚拟dom
        // React.createElement(标签名,标签属性,标签内容);
        const VDOM = React.createElement('h1', { id: 'title' }, 'hello,React');
        // 2.渲染虚拟dom到页面
        ReactDOM.render(VDOM, document.getElementById('test'))
      </script>
    </body>
    </html>

    jsx规则

    (1)jsx全称:javascript xml

    (2)react定义的一种 类似于 xml 的js扩展语法: js + xml

    (3)本质是React.createElement(component, props, ...children)方法的语法糖。

    (4)作用:用来简化创建虚拟DOM

      a、写法: var ele = <h1>hello, React</h1>

      b、注意1:他不是字符串,也不是HTML/XML标签

      c、注意2:他最终产生的是一个js对象

    (5)标签名任意:HTML标签或其它标签

    (6)定义虚拟DOM时不要写引号

    (7)标签中混入js表达式时要用{}

    (8)样式的类名指定不要用class,要用className

    (9)内联样式要用style={{key:value}}的形式去写

    (10)只有一个根标签

    (11)标签必须闭合

    (12)标签首字母

      a、若小写字母开头,则将该标签转换为html标签同名元素,若html没有该标签对应的同名元素,则报错。

      b、若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错。

    (13)jsx不能写 单行注释// 多行注释/**/  可以在{}中写js的单行注释和多行注释

    (14)jsx中可以写js表达式,但不能写js语句

      js表达式和js语句的区别?

      1.一个表达式会产生一个值,可以放在任何一个需要值的地方

        用一个变量去接,能接到值的就是表达式, const a = 表达式

        比如下面这些都是表达式:

          (1) a   变量

          (2)a+b

          (3)fn(1) 函数调用表达式

          (4)arr.map()

          (5)function test() {}

    <!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>hello-react</title>
      <style>
        .tittle{
          width: 200px;
          background: orange;
        }
      </style>
    </head>
    <body>
      <!-- 准备一个容器 -->
      <div id="test"></div>
      <!-- 引入react核心库 -->
      <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.min.js"></script>
      <!-- 引入react-dom, 用于支持react操作dom, 需要在核心库之后引入 -->
      <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.min.js"></script>
      <!-- 引入babel.js,用于将jsx转化为js -->
      <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.18.7/babel.min.js"></script>
    
      <script type="text/babel">/* 此处一定要写babel */
        const myId = 'Guigu';
        const myData = 'hello, React';
        // 1.创建虚拟dom
        const VDOM = (
          <div>
            <h1 className="tittle" id={myId.toLowerCase()}>
              <span style={{color:'white', fontSize:'20px'}}>{myData}</span>
            </h1>
            <h1 className="tittle" id={myId.toUpperCase()}>
              <span style={{color:'white', fontSize:'20px'}}>{myData}</span>
            </h1>
            <input type="text" />
            {
              // <Good>good标签</Good></Good> jsx不能用  // 单行注释  /**/多行注释 因为jsx会把注释当成内容
            }
          </div>
        )
        
        // 2.渲染虚拟dom到页面
        ReactDOM.render(VDOM, document.getElementById('test'))
      </script>
    </body>
    </html>

     jsx小练习,遍历

    <!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>jsx小练习</title>
      <style>
        .tittle{
          width: 200px;
          background: orange;
        }
      </style>
    </head>
    <body>
      <!-- 准备一个容器 -->
      <div id="test"></div>
      <!-- 引入react核心库 -->
      <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.min.js"></script>
      <!-- 引入react-dom, 用于支持react操作dom, 需要在核心库之后引入 -->
      <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.min.js"></script>
      <!-- 引入babel.js,用于将jsx转化为js -->
      <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.18.7/babel.min.js"></script>
    
      <script type="text/babel">/* 此处一定要写babel */
        const data = ['Angular', 'React', 'Vue'];
        // 1.创建虚拟dom
        const VDOM = (
          <div>
            <h1>前端js框架列表</h1>
            <ul>
              {
                // 不能用index直接做key,这里先用着
                data.map((item,index) => {
                  return <li key={index}>{item}</li>
                })
              }
            </ul>
          </div>
        )
        
        // 2.渲染虚拟dom到页面
        ReactDOM.render(VDOM, document.getElementById('test'))
      </script>
    </body>
    </html>

     react可以用两种方式定义组件,1:函数式组件 2:类组件

    函数组件:

    <script type="text/babel">/* 此处一定要写babel */
        // 1.创建函数式组件(函数组件,开头必须大写)
        function Demo() {
          console.log(this); // undefined   babel翻译完了会变成严格模式,严格模式下,进制自定义函数中的this指向window
          return <h2>我是用函数定义的组件(适用于【简单组件】的定义)</h2>
        }
        // 2.渲染组件到页面
        ReactDOM.render(<Demo />, document.getElementById('test'))
        /**
         * 执行ReactDOM.render()之后发生了什么?
         * 1.React解析组件标签,找到了Demo组件
         * 2、发现组件时函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,随后呈现在页面中
         * 
        */
      </script>

    类式组件:(如果组件有状态state,就是复杂组件,就用类式组件,不过在新版本上,hooks让函数式组件也可以玩转props、state、refs)

    <script type="text/babel">/* 此处一定要写babel */
        // 1.创建类组件(适用于复杂组件)
        class Demo extends React.Component {
          render() {
            console.log(this); // this是Demo类的实例对象
            return <h2>我是用类定义的组件,适用于定义【复杂的】组件</h2>
          }
        }
        // 2.渲染组件到页面
        ReactDOM.render(<Demo />, document.getElementById('test'))
        /**
         * 执行ReactDOM.render()之后发生了什么?
         * 1.React解析组件标签,找到了Demo组件
         * 2、发现组件是类定义的,随后new出来该类的实例,并通过该实例调用到原型链上的render方法
         * 3、将render返回的虚拟DOM转换为真实DOM呈现在页面中
         * 
        */
      </script>

     类中所有方法在内部都开启了 严格模式 use strict

    -

  • 相关阅读:
    (原创)monitor H3C switch with cacti
    (原创)monitor Dell Powerconnec 6224 with cacti
    (转载)运行主机管理在openvswitch之上
    图片鼠标滑动实现替换
    分布式缓存(一)失效策略和缓存问题击穿,雪崩,穿透
    Spring 事务源码学习
    FactoryBean和BeanFactory
    Spring AOP 源码学习
    “两地三中心”和“双活”
    安装 geopandas 步骤
  • 原文地址:https://www.cnblogs.com/fqh123/p/16597283.html
Copyright © 2020-2023  润新知