• react须知


    1. JSX是什么?

     1)JSX是一种facebook发明的语法。就是将HTML和JS 可以同时书写。其实是一种js的语法糖。

         但是浏览器不能识别,需要通过babel-loader来转译。

         @babel/core @babel/preset-react(将html标签转为js代码)

     2) const temp = <div>temp</div>;上面是JSX语法的代码。

        // 整个是个js赋值运算,=右侧是html代码;是html和js的混写。

        babel-loader将其转为js,如下:

    React.createElement(component, props, ...children) // 返回一个js对象,含有type,props等属性。然后等待被ReactDom.render渲染成真实DOM。

    2.两种组件都要求首字母大写

     React会将以小些字母开头的组件视为原生DOM标签。所以自定义组件名必须以大写字母开头!!

    当小写字母时,第一个参数被解析成字符串。

    当大写字母时,将其解析成Class或者函数组件。

    3. jsx的{}不能运行语句

    jsx代码分为js标签和{}; 后者要求里面是表达式或者变量。

    语句没有返回值。

    <div>
       {text}
    </div>

      1)if语句和for循环是语句,不是js表达式;不能使用在{}中

      2) 三目运算符是虽然js表达式,可以使用;但是根据eslint规范,不能嵌套使用。

    4. className不能写成class; htmlFor属性不能写成for

      1) 因为jsx很大程度上还是遵循的js的规约。而js中使用小驼峰命名规范。

      2) 在js中,class是js中的保留字,表示类;js中for是保留字,for循环。

    5.key属性

    1.key属性要求兄弟节点间唯一

    不要求全局唯一。

    所有通过map遍历生成的同级列表都要有一个唯一的key值。用于DOM DIff算法(同级同类型比较)的性能优化。

    <div>
      {
        ([1,2,3]).map(item => <span key={item}>{item}</span>)
      }
    </div>

    同级先比较key值,如果key值相同,再比较类型和属性等。如果都相等就不需要删除新增元素。依次比较。

    如果最后所有元素都相同,只是位置发生变化,那么只需要更换元素位置;不需要删除重建。提高性能。

    2. key属性只传递给React

    不会传递给组件。所以在props对象中,props.key读取不到, 返回undefined。

    6.style属性

    有两个{};外层括号表示是表达式括号;内部表示是个对象。

    <div style={{color: red}}>
      style属性
    </div>

    7.html字符串模版渲染

    <div dangerouslySetInnerHTML={{_html: '<input />'}}>
       // 使用dangerouslySetInnerHTML属性渲染字符串模版
       // 否则直接渲染成字符串
    </div>

    8. Props只读 

    react有一个严格的规则: 必须像纯函数一样保证他们的props不被修改。

    9. 不能渲染的数据

    true,false, undefined, null都不能渲染。

    <div />
    <div></div>
    <div>{false}</div>
    <div>{null}</div>
    <div>{undefined}</div>
    <div>{true}</div>
    
    // 全部等价

    但是对于运算符表达式返回布尔值,但是本身不是布尔值的,还是可以渲染。

    <div> 
       {
          this.state.data.length && <div>sth</div>
       }
    </div>
    // 如果值是[],length为0,虽然表达式是false,但是本身还是渲染0
    // 应该
    <div> 
       {
          this.state.data.length > 0 && <div>sth</div>
       }
    </div>
  • 相关阅读:
    目标检测算法的总结(R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD、FNP、ALEXnet、RetianNet、VGG Net-16)
    目标检测评价标准(mAP, 精准度(Precision), 召回率(Recall), 准确率(Accuracy),交除并(IoU))
    JavaScript中继承的多种方式和优缺点
    使用Vue封装暂无数据占位图组件
    Vue组件间通信方式到底有几种
    通俗易懂了解Vue中nextTick的内部实现原理
    从0开始编写webpack插件
    常用的webpack优化方法
    通俗易懂了解Vue内置组件keep-alive内部原理
    原生JS实现集合结构
  • 原文地址:https://www.cnblogs.com/lyraLee/p/10931548.html
Copyright © 2020-2023  润新知