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: 一个组件要从父组件接受参数;如果这个组件第一次存在于父组件中,不会执行。如果这个组件已经存在于父组件中,才会执行。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容