React入门笔记

一、环境搭建

在终端安装react:npm install -g create-react-app

新建项目:


create-react-app my-project

cd my-project          

yarn start


二、模版语法

App.js :


import React, { Component } from 'react';

import logo from './logo.svg';

import './App.css';

class App extends Component {

  render() {

    return (

      <div className="App">

        <header className="App-header">

          <img src={logo} className="App-logo" alt="logo" />

          <p>

            Edit <code>src/App.js</code> and save to reload.

          </p>

          <a

            className="App-link"

            href="https://reactjs.org"

            target="_blank"

            rel="noopener noreferrer"

          >

            Learn React

          </a>

        </header>

      </div>

    );

  }

}

export default App;

index.js:


import React from 'react';

import ReactDOM from 'react-dom';

import './index.css';

import App from './App';

import * as serviceWorker from './serviceWorker';

ReactDOM.render(<App />, document.getElementById('root'));

serviceWorker.unregister();

三、PropTypes 与 DefaultProps的应用

PropTypes:首先需引入 import PropTypes from ‘prop-types’;

组件传值时,子组件期望父组件传过来的=的数据类型。

例:


class TodoItem extends Component {

TodoItem.propTypes = {

    content: PropTypes.string,

    //oneOfType:数字类型或者字符串类型

    name: PropTypes.oneOfType([PropTypes.number, PropTypes.string])

}

}

DefaultProps:默认值


TodoItem.defaultProps = {

    test: 'hello world'

}

四、Props, State 与 render函数

当组件的state或者props发生改变的时候,render函数就会重新执行。

数据一变,页面就会被重新渲染。

当父组件的render函数被运行时,它的子组件的render都将被重新运行一次。

五、虚拟DOM

第一种方式:

1、state数据

2、JSX 模版

3、数据 + 模版 结合, 生成真实的DOM, 来显示

4、state 发生改变

5、数据 + 模版 结合, 生成真实的DOM,替换原始的DOM

缺陷:

第一次生成了一个完整的DOM片段

第二次生成了一个完整的DOM片段

第二次的DOM替换了第一次的DOM,非常耗性能

第二种方式:

1、state数据

2、JSX 模版

3、数据 + 模版 结合, 生成真是的DOM, 来显示

4、state 发生改变

5、数据 + 模版 结合, 生成真实的DOM,并不直接替换原始的DOM

6、新的DOM(DocumentFragment) 和原始的DOM 做对比,找差异

7、找出input框发生了变化

8、只用新的DOM 中的input 元素,替换掉老的DOM 中的input 元素

缺陷:

性能的提升并不明显

第三种方式:

1、state数据

2、JSX 模版

3、生成虚拟DOM(JS对象,用它来描述真实DOM) (损耗了性能,极小)

4、数据 + 模版 结合, 生成真实的DOM, 来显示

5、state发生变化

6、数据+模版 生成新的虚拟DOM (极大的提升了性能)

7、比较原始虚拟DOM和新的虚拟DOM 的区别,找到区别

8、直接操作DOM,改变内容

优点:

1)性能提升

2)它使得跨端应用得以实现。 React Native

六、React中ref的使用

直接获取DOM 元素,一般情况下不推荐使用。


handleBtnClick() {

    this.setState((prevState) => ({

      list: [...prevState.list, prevState.inputValue],

      inputValue: ''

    }), () => {   // setState运行后,异步调用这个函数。一般获取DOM 元素就写在该函数中

      console.log(this.ul.querySelectorAll('div').length);

    })

  }

七、React中的生命周期函数

指在某一个时刻组件会自动调用的函数

initialization:初始化

Mounting:组件挂载触发,第一次挂载

componentWillMount: 在组件即将被挂载到页面之前的时刻自动执行。

componentDidMount: 组件挂载到页面之后,自动被执行   
image

componentWillReceiveProps: 一个组件要从父组件接受参数;如果这个组件第一次存在于父组件中,不会执行。如果这个组件已经存在于父组件中,才会执行。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,809评论 1 18
  • 3. JSX JSX是对JavaScript语言的一个扩展语法, 用于生产React“元素”,建议在描述UI的时候...
    pixels阅读 2,804评论 0 24
  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 8,419评论 1 33
  • 顾城—— 隔膜的薄冰溶化了,湖水是那样透彻,被雪和谜掩埋的生命,都在春光中复活。 一切都明明白白,但我们仍匆匆错过...
    遇了个黑天鹅阅读 418评论 0 0
  • 水花是个大家庭 海浪花开无止境 湖水繁花荡涟漪 一江春水花重重 河水卷起千堆雪 小溪水花最欢腾 要问我爱哪一朵 雨...
    自雨自在阅读 787评论 15 13