React 基础知识

54 阅读3分钟

一、React 开发的三个核心依赖包

包名作用说明
reactReact 的核心库,提供创建组件、定义状态、生命周期等核心功能。
react-dom提供与 DOM 操作相关的方法,将组件渲染到浏览器页面中。
babelJavaScript 编译器,用于将 JSX 语法转换为浏览器可识别的 JavaScript 代码。

💡 现代 React 项目中通常通过 ViteCreate React App 自动集成这些依赖与配置。


二、React 如何封装组件?

1️⃣ 类组件封装方式

class App extends React.Component {
  render() {
    return <h2>Hello React</h2>;
  }
}

// 渲染根组件
const root = ReactDOM.createRoot(document.querySelector("#root"));
root.render(<App />);

2️⃣ 函数组件方式(推荐)

function App() {
  return <h2>Hello React</h2>;
}

💡 现代开发推荐使用函数组件,结合 React Hooks(useState, useEffect)即可实现完整逻辑。

三、事件绑定与 this 的绑定方式

方式一:直接绑定 this

<button onClick={this.handleClick.bind(this)}>点击</button>

方式二:在构造函数中提前绑定

class App extends React.Component {
  constructor() {
    super();
    this.state = { message: "Hello World" };

    // 提前绑定 this
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    console.log(this.state.message);
  }

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

方式三(推荐):使用箭头函数绑定

// 直接在类中定义箭头函数
class App extends React.Component {
  state = { message: "Hello World" };

  handleClick = () => {
    console.log(this.state.message);
  };

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

⚠️ 若在 render 中直接使用箭头函数,会在每次渲染时创建新函数,不推荐在高频渲染场景中使用。

四、 JSX 书写规范

✅ 顶层必须有且只有一个根元素
✅ JSX 多行时用 () 包裹,方便格式化
✅ 单标签必须自闭合(<img />, <input />)
✅ 注释写法:{/* 注释内容 */}

五、JSX 嵌入数据类型

数据类型显示情况示例
Number / String / Array✅ 正常显示{name}, {arr}
null / undefined / Boolean🚫 不显示{null} → 空
Object❌ 报错(不能作为子元素){ {a:1} }
显示 null/undefined/boolean✅ 转为字符串{String(value)}{value + ''}{value.toString()}

Object类型不能作为子元素,如需显示如下:

<h2> {ddd.name}</h2>
{/*对象多个属性*/}
<h2> {Object.keys(ddd)[0]}</h2>

六、 JSX 传递参数

  • event参数的传递 - onClick={(event) => this.btn1Click(event)}
  • 额外参数的传递 - onClick={(event) => this.btn2Click(event, "http", 18)}
btn1Click(event) {
  console.log(event);
}
btn2Click(event, name, age) {
  console.log(event, name, age);
}

七. JSX的代码是如何被编译为React代码的?它的本质是进行什么操作?

  • jsx是通过babel工具转换编译成React代码的
  • 本质
    • jsx 仅仅只是 React.createElement(component, props, ...children) 函数的语法糖
    • 所有的jsx最终都会被转换成React.createElement的函数调用

`

八. 什么是虚拟DOM?虚拟DOM在React中起到什么作用?

  • 什么是虚拟DOM?
    • Virtual DOM 是一种编程概念,UI以一种理想化或者说虚拟化的方式保存在内存中
    • Virtual DOM 本质上是 JavaScript 对象,是真实 DOM 的描述,⽤⼀个 JS 对象来描述⼀个 DOM 节点
    • 我们知道jsx转成React代码的本质是 - 转换成React.createElement的函数调用
    • 通过React.createElement的函数创建出来的ReactElement对象
    • React利用ReactElement对象组成了一个JavaScript的对象树 - JavaScript的对象树就是虚拟DOM
  • 虚拟DOM在React中的作用
    • 虚拟DOM 通过diff算法 - 以最⼩的代价更新变化的视图
    • 跨平台渲染
    • 声明式编程 - 虚拟DOM帮助我们从命令式编程转到了声明式编程的模式
      • 你只需要告诉React希望让UI是什么状态
      • React来确保DOM和这些状态是匹配的
      • 不需要直接进行DOM操作,就可以从手动更改DOM、属性操作、事件处理中解放出来