Skip to content

React

React是一个由Facebook开发的用于构建用户界面的Javascript库。它采用组件化开发模式,通过虚拟DOM技术实现高效渲染。React具有声明式编程单向数据流等特点,支持服务端渲染,广泛应用于现代Web应用开发。

声明式编程体现为:

只需要通过JSX/TSX声明组件的状态结构,React负责根据数据变化自动更新界面。当状态改变时,React会重新渲染组件,不需要用户手动操作DOM元素,只需要关注“界面应该是什么状态”即可。

单向数据流体现为:

React采用单向数据流模式,即数据只能从父组件流向子组件,不能从子组件流向父组件。子组件不能直接修改接收到的props,只能通过父组件传递的回调函数“请求”父组件更新其状态。这种设计使得组件之间的状态管理更加简单和可预测,避免了复杂的状态传递和同步问题。

React本身不提供类似于Vue中的v-model自动双向绑定机制。

组件

React组件可以分为两种类型:函数组件类组件

函数组件是一个接受props作为参数并返回一个React元素的函数。它们通常用于简单的、无状态的组件。

类组件是一个继承自React.Component的类,它包含一个render方法,用于返回组件的React元素。类组件通常用于复杂的、有状态的组件。

一些区别:

  • 状态管理不同:函数组件没有自己的状态和生命周期方法,而类组件具有自己的状态和生命周期方法。
  • 更新控制不同:类组件可以使用一些特殊的方法来控制组件的更新过程,而函数组件则无法使用这些方法。

组件复用

1.props: 通过props将数据和回调函数传递给子组件

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

2.高阶组件(HOC)

js
function withGreeting(WrappedComponent) {
  return function(props) {
    return (
      <>
        <Greeting name={props.name} />
        <WrappedComponent {...props} />
      </>
    );
  };
}

3.Render props

js
function Greeting(props) {
  return props.children("Hello");
}

function App() {
  return (
    <Greeting>
      {greeting => (
        <>
          <h1>{greeting}, World</h1>
          <h2>{greeting}, React</h2>
        </>
      )}
    </Greeting>
  );
}

useMemo和useCallback

useMemo和useCallback都是React提供的用于优化性能的Hook函数。

  • useMemo用于缓存计算结果,避免重复计算。
  • useCallback用于缓存回调函数,避免重复创建。

这两个Hook函数都接受一个回调函数作为参数,返回一个缓存的值或函数。

区别:

  • useMemo返回缓存的值,而useCallback返回缓存的函数。
  • useMemo在依赖项发生变化时重新计算缓存值,而useCallback在依赖项发生变化时重新创建缓存函数。