React入门

135 阅读2分钟

环境配置

CDN链接(不常用)

  • 可以获得 React 和 ReactDOM 的 UMD 版本
  • 有开发环境和生产环境两种,详情可查阅官网:reactjs.bootcss.com/
注:
  • 指定版本需要更换版本号
  • CDN引入React建议设置 crossorigin 属性
crossorigin 属性?

create-react-app(常用,基于webpack)

  • 可以创建单页应用程序并提供了⼀个零配置的现代构建设置
安装步骤:
  • 全局安装:npm install -g create-react-app
  • 创建项目:create-react-app my-app
  • 启动项目:npm start 或 yarn start
                       安装yarn:npm install yarn -g
  • 构建生产:npm run build 或 yarn build (暂时不用)
  • 更改webpack配置(单向,不可恢复):npm run eject
文件结构:


重构index.js

import React from 'react';	//=>vdom虚拟dom的概念
import ReactDOM from 'react-dom';
//将JSX挂载到名为 root 的节点下,有且仅有一个根节点
ReactDOM.render(<h1>hello world</h1>,document.querySelector('#root'));	

JSX

JSX仅仅是为了更好地描述UI并能够有效地提高开发效率的在JavaScript内部实现的React.createElement(component, props, ...children) 函数的语法糖。
JSX实质就是React.createElement的调⽤,最终的结果是React“元素”(JavaScript对象)
JSX使用
  • 通过花括号(所有合法表达式!)
问:函数是不是表达式?React”元素“是不是表达式?

const title = "hello React";
const jsx = <h2>{title}</h2>;

const subTitle = <p>hello, React</p>;
const jsx = <h2>{subTitle}</h2>;

动态渲染

React 元素不可变,被创建后无法改变其内容或属性

React.render更新UI

function Time() {
  const element = (  
    <div>  
      <h2>It is {new Date().toLocaleTimeString()}.</h2>  
    </div>
  );
  ReactDOM.render(    
    element,    
    document.getElementById('root')  
  );
}
setInterval(Time, 1000);

条件渲染

if语句(外部用)

let isShowTitle = true;
if (isShowTitle) {  
  title = <h1>是否显示h1</h1>;
}

逻辑与&&

const jsx = (  
  <div>  
    {isShowTitle && <h1>title1</h1>}  
  </div>
);
ReactDOM.render(
  jsx, 
  document.querySelector("#root")
);

三目运算符(替代if...else)

const showTitle = true;
const title = name ? <h2>{name}</h2> : null;
const jsx = (  
  <div>    
    {title}  
  </div>
);

循环列表 && key

数组会被作为⼀组⼦元素对待,数组中存放⼀组jsx可⽤于显示列表数据

const arr = [1,2,3].map(num => <li key={num}>{num}</li>)
const jsx = (  
  <div>    
    <ul>{arr}</ul>  
  </div>
);

案例

import logo from "./logo.svg";
import "index.css";
const box = {  
  color:"blue",  
  border:"1px blue solid"
}
const jsx = (  
  <div style={box}>    
    {/* 属性:静态值⽤双引号,动态值⽤花括号;class、for等要特殊处理。 */}    
    //className:避开关键字    
    <img src={logo} 
    style={{ width:100,height:100,border:"1px red solid" }} 
    className="widthheight"/>  
  </div>
);