深入 React:从基础到进阶

321 阅读4分钟

深入 React:从基础到进阶

React 是当前最受欢迎的前端库之一,它由 Facebook 开发,首次发布于 2013 年。React 的核心思想是通过声明式的方式构建用户界面,使用组件化的结构以及虚拟 DOM 来提高性能。随着 React 的发展,它逐渐成为了一个完整的前端解决方案,从 UI 构建到 Web App 开发都可以依赖它。

1. React 基本介绍

React 的核心思想是通过声明式编程来构建用户界面,通常简化为 UI = fn(state)。React 起源于 Facebook,用于构建 Instagram 网站,解决了当时许多框架存在的性能和复杂性问题。React 于 2013 年开源后,凭借高效、灵活的特性迅速吸引了开发者的关注。

React 的设计理念深刻影响了整个前端领域,它不仅适用于单页面应用(SPA),还支持从小型应用到复杂 Web 应用的开发,甚至可以用于移动应用开发(通过 React Native)。

React 的重要版本更新

  • React 16:引入了 Fiber 架构,使得 React 渲染变得可中断、可分片、具有优先级。
  • React 16.8:推出了 Hooks,这是 React 函数组件的革命性更新,标志着从类组件向函数组件过渡。
  • React 17:侧重于 React 内部的简化和升级,没有新增重大功能。
  • React 18:引入了 SuspenseTransition 和更强大的并发功能(Concurrent Rendering)等新特性。

React 官网
React Conf 官网

2. React 特点

React 的优势不仅在于其高效的 UI 渲染机制,还在于它独特的开发模型:

1. 声明式

React 让开发者专注于如何呈现 UI,而不需要关心更新 UI 的过程,React 会根据状态自动更新界面。

2. 组件化

UI 被划分为多个组件,每个组件拥有自己的状态和逻辑,组件的组合可以构建复杂的界面。组件之间通过 props 传递数据,组件本身可以管理自己的状态。

3. 一次学习,跨平台编写

React 支持多平台开发,包括 Web、移动端(React Native)和桌面端(React Electron)等。

4. 单向数据流

React 中的数据流动方向是单向的,这使得数据变得更加可预测和易于调试。

5. 虚拟 DOM 和 Diff 算法

React 会先在内存中进行虚拟 DOM 更新,再与实际 DOM 进行对比,最终只更新那些发生变化的部分,从而提高渲染效率。

3. React 开发环境搭建

虽然 React 可以通过 CDN 直接引用,但是实际开发中通常使用脚手架工具来快速搭建项目。React 官方提供了 Create React App,使得搭建一个 React 项目变得非常简单。

npx create-react-app my-app
cd my-app
npm start

通过以上命令,React 会自动为我们配置好开发环境,并启动一个开发服务器。

4. JSX 基础语法

JSX 是 React 推荐的用于描述界面的语法扩展,看起来像 HTML,但其实它是 JavaScript 的一种语法糖。React 会将 JSX 代码转换成 React.createElement 方法调用。

JSX 语法规则

  • JSX 中只能有一个根元素。
  • 可以在 JSX 中嵌入 JavaScript 表达式,写在 {} 中。
  • 在 JSX 中使用 className 代替 HTML 中的 class
  • 在 JSX 中使用对象进行样式设置。
  • 注释需要使用 {/* 注释内容 */}
function App() {
  return (
    <div>
      Hello, React!
    </div>
  );
}

5. React 组件与事件绑定

React 中的组件有两种创建方式:类组件和函数组件。类组件通过 React.Component 创建,函数组件通过函数定义。

事件绑定

React 的事件绑定与传统 JavaScript 不同,事件处理函数是通过 on<Event> 属性绑定,例如 onClickonChange

function App() {
  const handleClick = () => {
    alert('Hello, React!');
  };

  return <button onClick={handleClick}>Click me</button>;
}

this 的指向

在类组件中,事件处理函数中的 this 默认指向 undefined,需要手动绑定。可以使用箭头函数、bind 方法来解决。

class Welcome extends React.Component {
  handleClick = () => {
    alert('Hello!');
  };

  render() {
    return <button onClick={this.handleClick}>Click me</button>;
  }
}

6. 组件状态与数据传递

组件状态

组件的状态(state)是 React 中非常重要的一部分,它决定了组件的动态行为。React 推荐通过 setState 方法来修改状态。

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }

  increment = () => {
    this.setState({ count: this.state.count + 1 });
  };

  render() {
    return (
      <div>
        <p>Count: {this.state.count}</p>
        <button onClick={this.increment}>Increment</button>
      </div>
    );
  }
}

Props 数据传递

React 中的 props 用于父组件向子组件传递数据。

function Greeting({ name }) {
  return <h1>Hello, {name}!</h1>;
}

function App() {
  return <Greeting name="John" />;
}

7. React 生命周期与 Hooks

生命周期

React 中的生命周期分为挂载、更新、卸载三个阶段。在类组件中,我们通过生命周期钩子函数(如 componentDidMountcomponentWillUnmount)来控制组件的行为。

Hooks

React 16.8 引入了 Hooks,使得我们可以在函数组件中使用 state 和其他 React 特性。最常用的 Hooks 是 useStateuseEffect

import React, { useState, useEffect } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  }, [count]);

  return (
    <div>
      <p>{count}</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

8. React 表单处理

受控组件

React 中的受控组件是指表单元素的值由组件的状态(state)来控制。

function App() {
  const [value, setValue] = useState("");

  const handleChange = (e) => setValue(e.target.value);

  return (
    <div>
      <input type="text" value={value} onChange={handleChange} />
    </div>
  );
}

非受控组件

非受控组件是指表单元素的值由 DOM 自己管理。通过 ref 引用可以访问到 DOM 元素的当前值。

function App() {
  const inputRef = useRef();

  const handleSubmit = () => {
    alert(`Input Value: ${inputRef.current.value}`);
  };

  return (
    <div>
      <input ref={inputRef} />
      <button onClick={handleSubmit}>Submit</button>
    </div>
  );
}

结语

React 是一个强大的前端库,它通过组件化、虚拟 DOM 和声明式编程的方式极大提高了开发效率和应用性能。随着 React 生态的不断发展,越来越多的开发者选择它作为构建 Web 和移动应用的首选工具。如果你还未接触过 React,快来一起体验这个现代化的前端框架吧!