说说对 React 的理解

一、是什么

  • React,用于构建用户界面的 JavaScript 库,只提供了 UI 层面的解决方案

这句话的意思是,React 是一个专注于构建用户界面的 JavaScript 库,它主要关注于解决 UI 层面的问题。它并不是一个全功能的框架,而是提供了一种有效的方式来组织和渲染用户界面。React 的主要目标是提供一种可组合、可重用的组件化开发模式,以及高效的界面更新算法。

相对于一些全功能的框架,如 Angular 或 Vue.js,React 更专注于 UI 层面的问题,如组件化、虚拟 DOM 管理和状态管理。它并不包含诸如路由、状态管理、表单验证等功能,这些功能可以通过与其它库的结合来实现。

React 的设计哲学是将用户界面拆分成独立且可复用的组件,通过组件之间的组合来构建复杂的界面。它通过虚拟 DOM 技术来高效地更新界面,以保证性能。因此,React 提供了一种专注于构建用户界面的解决方案。

React 遵循组件设计模式、声明式编程范式和函数式编程概念,以使前端应用程序更高效

使用虚拟DOM来有效地操作DOM,遵循从高阶组件到低阶组件的单向数据流

帮助我们将界面成了各个独立的小块,每一个块就是组件,这些组件之间可以组合、嵌套,构成整体页面

react 类组件使用一个名为 render() 的方法或者函数组件return,接收输入的数据并返回需要展示的内容。

index.tsx

js 复制代码
const ReactComprehend = () => {
  return <>reactComprehend</>;
};

export default ReactComprehend;

App.tsx

js 复制代码
import ReactComprehend from "../pages/reactComprehend";

function App() {
  return <ReactComprehend></ReactComprehend>;
}

export default App

二、特性

React特性有很多,如:

JSX语法

JSX 是一种 JavaScript 语法扩展,主要用于 React 框架。它允许你在 JavaScript 代码中直接编写 HTML 结构,使得代码更具可读性和可维护性。

JSX 的基本语法规则如下:

  1. JSX 标签的名称(例如 <div><ReactComponent>)使用驼峰式命名,而不是 HTML 的标准小写。
  2. 标签的属性可以包含在 JavaScript 表达式中,使用大括号 {} 包裹。例如:<div style={{ color: 'red', fontSize: '18px' }}>Hello, world!</div>
  3. 标签可以嵌套,并且可以使用 JavaScript 表达式来控制嵌套的元素数量。例如:<div>{5}</div> 会渲染出5个 <div> 元素。
  4. JSX 中的 JavaScript 表达式必须被包裹在大括号 {} 中,不能使用小括号 ()。例如:<div>{5 + 3}</div> 是正确的,而 <div>{5+3}</div> 是错误的。
  5. JSX 中的 JavaScript 表达式不能包含分号 ;,也不能包含任何非 JavaScript 表达式的内容。
  6. JSX 中的 JavaScript 表达式不能包含未闭合的括号 (、方括号 [ 或花括号 {,因为这会破坏 JSX 的语法。

在将 JSX 代码转换为实际的 HTML 或 JavaScript 时,可以使用 Babel 这样的工具进行转换。Babel 会将 JSX 代码转换为普通的 JavaScript 代码,以便在浏览器中运行。

单向数据绑定

React中的单向数据绑定是指数据流从上至下,从父组件流向子组件。父组件负责传递数据给子组件,子组件根据这些数据进行渲染。这种数据流方式有助于简化组件间的关系,提高代码的可维护性和可读性。

在React中,可以使用props来实现单向数据绑定。父组件将数据作为props传递给子组件,子组件通过props接收这些数据,并在render方法中使用它们进行渲染。子组件不能直接修改从父组件接收的数据,如果需要修改数据,应该通过事件回调或者状态管理工具(如Redux)来通知父组件进行更新。

这种单向数据流的设计模式有助于降低组件间的耦合度,使得组件更易于测试和维护。同时,它也有助于提高应用程序的性能,因为父组件可以控制子组件的数据更新,避免了不必要的重新渲染和DOM操作。

js 复制代码
import React from 'react';  
  
// 父组件  
class ParentComponent extends React.Component {  
  constructor(props) {  
    super(props);  
    this.state = {  
      message: 'Hello, world!'  
    };  
  }  
  
  handleClick = () => {  
    this.setState({ message: 'Hello, React!' });  
  }  
  
  render() {  
    return (  
      <div>  
        <h1>{this.state.message}</h1>  
        <button onClick={this.handleClick}>Change Message</button>  
        <ChildComponent message={this.state.message} />  
      </div>  
    );  
  }  
}  
  
// 子组件  
class ChildComponent extends React.Component {  
  render() {  
    return (  
      <div>  
        <h2>{this.props.message}</h2>  
      </div>  
    );  
  }  
}  
  
export default ParentComponent;

在上面的代码中,ParentComponent是一个父组件,它维护了一个状态message,并通过render方法将message作为prop传递给ChildComponent。当用户点击按钮时,ParentComponent会触发handleClick方法,更新message的状态,并通过重新渲染来更新UI。由于数据流是单向的,ChildComponent不能直接修改从父组件接收的数据。如果需要修改数据,应该通过事件回调或者状态管理工具来通知父组件进行更新。

虚拟DOM

在React中,虚拟DOM是一个概念,它允许React使用一个与实际DOM相似的数据结构来表示组件的状态。React使用虚拟DOM来优化DOM操作,提高应用程序的性能。

当组件的状态发生变化时,React会创建一个新的虚拟DOM,并将其与旧的虚拟DOM进行比较。通过这种方式,React可以准确地找出实际需要更新的部分,而不是对整个页面进行重新渲染。这种比较过程称为"Diffing",它会找到两个树之间的最小差异,并只更新这些差异,而不是重新渲染整个组件。

React使用JavaScript来创建虚拟DOM,而不是直接操作DOM。这种抽象化简化了组件的开发过程,并使得组件更容易测试和维护。通过使用虚拟DOM,React能够避免不必要的DOM操作,提高应用程序的性能。

总之,虚拟DOM是React中的一个重要概念,它使得React能够高效地更新页面上的内容,同时保持组件的可维护性和可测试性。

声明式编程

以下是一个简单的React组件示例,展示了声明式编程的用法:

js 复制代码
import React from 'react';  
  
// 声明式组件  
function Welcome(props) {  
  return <h1>Hello, {props.name}</h1>;  
}  
  
// 父组件  
class ParentComponent extends React.Component {  
  constructor(props) {  
    super(props);  
    this.state = { name: 'React' };  
  }  
  
  handleClick = () => {  
    this.setState({ name: 'React Developer' });  
  }  
  
  render() {  
    return (  
      <div>  
        <Welcome name={this.state.name} />  
        <button onClick={this.handleClick}>Change Name</button>  
      </div>  
    );  
  }  
}  
  
export default ParentComponent;

代码中,Welcome组件是一个声明式组件,它描述了一个简单的欢迎消息。它接收一个name属性,并将其显示在标题中。父组件ParentComponent使用Welcome组件,并通过状态name传递数据。当用户点击按钮时,父组件的状态会更新,并触发重新渲染。React会自动处理DOM操作,更新界面上的内容。这种声明式编程范式使得代码更加简洁和可维护,并且避免了不必要的DOM操作。

在React中,声明式编程是一种重要的编程范式。通过声明式编程,开发者可以描述他们想要的结果,而不是详细说明如何实现这个结果。React使用虚拟DOM来优化DOM操作,提高应用程序的性能。

在React中,组件是声明式编程的基本单位。组件描述了用户界面的某个部分,并使用props来接收数据和状态。通过组件,开发者可以描述应用程序的界面,而不需要关心如何渲染这些组件。

当组件的状态发生变化时,React会自动重新渲染组件,并使用虚拟DOM进行Diffing操作。Diffing会找出新旧虚拟DOM之间的最小差异,并只更新这些差异,而不是重新渲染整个组件。这种声明式编程范式使得React能够高效地更新页面上的内容,同时保持组件的可维护性和可测试性。

总的来说,在React中,声明式编程使得开发者能够更专注于解决问题本身,而不是陷入细节中。通过使用组件和虚拟DOM,React提供了强大的工具来描述用户界面,并自动处理DOM操作,从而提高应用程序的性能和可维护性。

Component

在React中,组件(Component)是一个独立的可重用的界面部分。它定义了如何渲染界面的一部分,包括它的样式、属性和子组件。

React中的组件可以分为两种类型:函数组件和类组件。函数组件是一种简单的组件,它接收props作为输入,并返回一个React元素。函数组件通常用于简单的UI元素,如按钮或文本。类组件是使用ES6类语法定义的组件,它提供了更多的功能,如状态管理和生命周期方法。类组件通常用于更复杂的UI组件,如表单或导航菜单。

在React中,组件是构建用户界面的基本单位。通过组合和嵌套多个组件,可以构建出复杂的用户界面。组件还可以接收props作为参数,以传递数据和属性给子组件。这使得组件具有很高的可重用性和可维护性,可以在不同的应用程序中重复使用。

总的来说,在React中,组件是构建用户界面的核心概念。通过使用组件,可以构建出可重用、可维护和易于测试的用户界面。

三、React 存在的优势

  1. 高效性能:React使用虚拟DOM,通过Diffing算法来最小化DOM操作,提高了应用程序的性能和响应速度。

  2. 组件化开发:React采用组件化的开发方式,使得代码更加模块化、可重用性和可维护性。

  3. 跨平台兼容:React可以在多种平台上运行,包括Web、Native、桌面应用程序等,这使得开发人员可以更轻松地构建跨平台应用程序。

  4. 丰富的生态系统:React拥有庞大的社区和丰富的第三方库,使得开发人员可以快速构建复杂的应用程序。

  5. 易学易用:React语法简洁明了,使得开发人员可以快速上手并构建出高质量的应用程序。

  6. 标准化:React遵循Web标准化的原则,使得开发人员可以更好地遵循最佳实践,并与其他Web技术无缝集成。

  7. 声明式编程:React采用声明式编程范式,使得开发人员能够更专注于描述应用程序的状态和行为,而不是陷入底层的DOM操作中。这有助于提高代码的可读性和可维护性。

  8. 灵活的组件架构:React的组件架构非常灵活,允许你使用函数式和类组件两种方式进行开发。这为开发者提供了更大的自由度和选择空间,可以根据项目需求选择最适合的组件开发方式。

  9. 状态管理:React提供了一个内置的状态管理机制,使得开发者可以方便地管理组件内部的状态。通过状态更新,可以自动触发重新渲染,简化了组件之间的数据传递和同步。

  10. 社区支持:React拥有庞大的开发者社区,提供了丰富的资源和支持。无论遇到什么问题,你都可以在社区中找到解决方案或者得到其他开发者的帮助。

  11. 兼容性好:React具有良好的兼容性,可以在不同的浏览器和平台上运行,无需担心兼容性问题。此外,React还支持与各种第三方库和框架集成,如Redux、GraphQL等,使得开发人员可以更加灵活地构建复杂的应用程序。

  12. 性能优化:React内置了性能优化功能,如虚拟DOM和Diffing算法,使得应用程序在运行时更加高效。此外,React还提供了各种性能监控和调试工具,帮助开发者优化应用程序的性能。


相关推荐
mldong8 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排8 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60619 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角10 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!10 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰10 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi12 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen12 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马13 小时前
AI源码分析:拆解模型底层实现逻辑
前端
BillKu13 小时前
全局样式变量:CSS 自定义属性(--border-color)和SCSS 变量($border-color)的说明
javascript·css·scss