第一节:认识react

114 阅读1分钟

react

它是构建用户界面的javascript库 → 严格上来说不是框架

react的主观意愿

1 → React 仅仅负责View的层的渲染

2 → 它是一个视图渲染库,不做框架的事情

总结: React只负责视图渲染,不要要求它去做别的事情

简单使用react

1 → 添加根容器 id app

2 → 完全CDN方式引入进行开发 → 打包会体积小,cdn是加速的

  • crossorigin 是允许跨域 → 写上
<!-- react CDN 开发环境 -->
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
  
<!-- 生产环境 -->
<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>

3 → 创建 React组件

  • React: React API → 提供处理视图的API集合
  • ReactDOM: 从render函数 → 虚拟DOM → 真实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>Document</title>
  <!-- react CDN 开发环境 -->
  <script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
</head>
<body>
  <div id="app"></div>

  <script src="./index.js"></script>
</body>
</html>

index.js

const span = React.createElement('span', {
  className: 'text',
  key: 1
},"This is a span")

ReactDOM.render(
  React.createElement('div', {
    'data-tag': 'div'
  },
  [span]
  ),
  document.getElementById('app')
)

image.png

组件渲染

class MyButton extends React.Component{
  constructor(props) {
    super();
    // MyButton中的状态
    this.state = {
      openStatus: false
    }
 
  }
  render() {
    return '视图'
  }
}

ReactDOM.render(
  React.createElement(MyButton),//组件
  document.getElementById('app')
)

react组件

1 → 继承React.Component这个类

2 → render函数 返回一个视图

class MyButton extends React.Component{
  constructor(props) {
    super();
    // 状态
    this.state = {
      openStatus: false
    }
 
  }

  render() {
    const oP = React.createElement(
      'p',
      {
        className: 'text',
        key: 1
      },
      this.state.openStatus ? '打开' : '关闭'
    );

    const oBtn = React.createElement(
      'button',
      {
        key: 2,
        onClick: () => {this.setState({
          openStatus: !this.state.openStatus
        })}
      },
      this.state.openStatus ? '关闭 ->' : '<- 打开'
    );
    const wrapper = React.createElement(//=> 容器组件
      'div',
      {
        className: 'wrapper'
      },
      [oP, oBtn]//=> 子组件
    )
    return wrapper;
  }
}


ReactDOM.render(
  React.createElement(MyButton),
  document.getElementById('app')
)

image.png

版本选择

创建React 17.0

Node ≥ 10.16

NPM ≥ 5.6

创建React项目

1 → npx create-react-app my-react

  • 内部的工程化: babel → js 、 webpack

2 → cd my react → 进入项目中

3 → yarn start / npm start → 启动

4 → yarn build / npm run build → 打包项目