React 简介

React 是一个用于构建用户界面的 JavaScript 库。

什么是 React

React 是 Facebook 于 2013 年开源的 JavaScript 库,用于构建用户界面。React 采用组件化开发模式,让开发者可以用声明式的方式编写 UI,提高了代码的可维护性和可复用性。

React 的特点

React 具有以下特点:组件化开发、虚拟 DOM、单向数据流、JSX 语法、丰富的生态系统。

JSX 语法

JSX 是 JavaScript 的语法扩展,看起来像 HTML。

JSX 基础

JSX 是一种 JavaScript 的语法扩展,可以在 JavaScript 中编写类似 HTML 的标记。

const element = <h1>Hello, world!</h1>;

在 JSX 中嵌入表达式

可以在 JSX 中使用大括号嵌入任何 JavaScript 表达式。

const name = "Tom";
const element = <h1>Hello, {name}!</h1>;

const sum = <p>2 + 3 = {2 + 3}</p>;

组件和 Props

组件是 React 的核心概念,用于封装可复用的 UI 代码。

函数组件

函数组件是最简单的组件形式,接受 props 并返回 JSX。

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

类组件

类组件使用 ES6 class 语法,需要继承 React.Component。

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

Props 只读性

组件必须像纯函数一样保护自己的 props,不应该修改传入的 props。

State 和生命周期

State 是组件的内部状态,允许组件随时间变化。

使用 State

在函数组件中使用 useState Hook 管理状态。

import { useState } from "react";

function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

事件处理

在 React 中处理 DOM 事件。

事件处理函数

React 事件的命名采用驼峰式,而不是纯小写。

function ActionLink() {
  function handleClick(e) {
    e.preventDefault();
    console.log("Clicked");
  }
  
  return (
    <a href="#" onClick={handleClick}>
      Click me
    </a>
  );
}

条件渲染

根据条件渲染不同的内容。

条件运算符

使用三元运算符或逻辑运算符进行条件渲染。

function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  
  return (
    <div>
      The user is <b>{isLoggedIn ? "currently" : "not"}</b> logged in.
    </div>
  );
}

列表和 Keys

渲染多个相同的组件。

渲染列表

使用 map 方法渲染列表。

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) => (
    <li key={number.toString()}>
      {number}
    </li>
  ));
  return <ul>{listItems}</ul>;
}

表单

在 React 中处理表单输入。

受控组件

表单元素的值由 React 状态控制。

function NameForm() {
  const [name, setName] = useState("");
  
  function handleSubmit(e) {
    e.preventDefault();
    alert("Submit: " + name);
  }
  
  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input 
          type="text" 
          value={name} 
          onChange={(e) => setName(e.target.value)} 
        />
      </label>
      <button type="submit">Submit</button>
    </form>
  );
}

Hook 概述

Hook 是 React 16.8 的新特性,允许在函数组件中使用 state。

useState

useState 是最常用的 Hook,用于在函数组件中添加状态。

const [state, setState] = useState(initialState);

useEffect

useEffect 用于在组件中执行副作用操作。

import { useEffect } from "react";

useEffect(() => {
  document.title = "You clicked " + count + " times";
}, [count]);
上一篇Vue.js 教程