React学习之路

Chapter1

2019-03-28  本文已影响0人  vam笙

React一些特点

  1. 专注于视图层
  2. 业务框架(也可以理解为model层)可以根据业务场景自行选择。
  3. Virtual DOM提高性能。
  4. 便于和其他平台集成
    • 基于VD我们可以渲染出不同的原生控件
    • 即组件在输出的时候,究竟是输出成web DOM,还是安卓控件,还是IOS控件,都有平台本身决定。
    • learn once, write anywhere

JSX

概念

写法注意点:

  1. 定义标签时,只允许被一个标签包裹,即必须只有一个root节点

    • 错误写法

        <span>11</span>
        <span>22<span>
      
    • 正确

        <div>
           <span>111</span>
           <span>222<span>
        </div>
      
  2. 标签必须闭合,即单标签必须有 />

    • 错误

       <Com >
      
    • 正确

       <Com />
      
  3. DOM元素用小写字母开头,组件元素用大写字母开头

  4. 命名空间,解决命名冲突或对一类组件进行分类

     //namespace.js
     import React, { Component } from 'react';
    
     const com1 = () => {
       return(
          <div>
             NameSpace命名空间下的com1组件
         </div>
       )
     }
    
     const com2 = () => {
        return(
          <div>
             NameSpace命名空间下的com2组件
          </div>
        )
     }
    
     export const NameSpace = {com1, com2};
    
     // app.js
     import { NameSpace } from './namespace.js';
    
     render() {
         return() {
           <NameSpace.com1 />
           <NameSpace.com2 />
         }
     }
    
  5. 注释

  6. DOCTYPE(有些特殊,后续会说到)

元素属性

改变

写法

组件

Web Component规范

组件的创建

数据流

单项数据流

states

props

children属性
组件prop
propTypes
 import PropTypes from 'prop-types';

static propTypes = {
  name: PropTypes.string,
  value: PropTypes.oneOfType([
    PropTypes.string,
    PropTypes.number,
    PropTypes.arrayOf(PropTypes.node),
    PropTypes.func
  ]).isRequired
}

// 默认属性值
static defaultProps = {
  name: 'foo',
  value: 'bar'
}

React生命周期

React-DOM

refs

概念

形式

  1. 可以是回调函数,在组件被挂载后执行

    <input ref={(ref) => this.textInput = ref;} />
    
  2. 可以是字符串
    <input ref="input" />

  3. 不同组件类型得到的东西不一样

    • 如果ref在原生DOM组件上,则会得到DOM节点

        <buttton>...</button>
      
    • 如果ref在React组件上,则会得到该组件实例
      注意:如果组件为无状态组件,则给它上加ref的话,为undifined,无效。因为它有组件类实例化的过程,组件的挂载只是方法调用而已。

        Button {
            context: {},
            props: {},
            refs: {},
            children: {},
            ...
        }
      

与findDOMNode的区别

  1. 首先要明白实例和DOM节点不是一个东西。

  2. ref得到的是实例,就像上面的Button{...}一样,而如果改为findDOMNode方法,得到的是DOM,即就会是:<button>...</button>

  3. 不要把ref和findDOMNode混用,即

       const comRef = this.refs.com;
       const comDom = ReactDOM.findDOMNode(comRef);
       // do something with comDom
    
    • 一来,我们本来写这个组件是要具有封装性的,而如此在外面得到了该组件的DOM进行一系列操作,则打破了它的封装性。
    • 二来,我们打破了父子组件仅通过props通信的原则。

安全与性能

安全

性能

注意点

上一篇 下一篇

猜你喜欢

热点阅读