首页 > 其他分享 >React 进阶深入理解核心概念与高阶实践

React 进阶深入理解核心概念与高阶实践

时间:2024-12-15 14:57:21浏览次数:7  
标签:function return 进阶 React useState 组件 const 高阶


在上一节中,我们学习了 React 的基础知识,包括组件、状态管理和基本操作。接下来,我们将进一步探索 React 的高级功能和实战技巧,例如 组件间通信高阶组件Context APIReact Router 等。这些内容将帮助你构建更复杂、功能更丰富的应用。


一、组件间通信

React 的组件树是单向数据流,但在实际开发中,组件之间需要相互通信,常见的方式包括:

1. 父子组件通信(通过 props

父组件通过 props 将数据传递给子组件。

示例:父组件向子组件传递数据

function Child({ message }) {
  return <h1>{message}</h1>;
}

function Parent() {
  return <Child message="Hello from Parent!" />;
}
2. 子组件向父组件通信(通过回调函数)

父组件可以将回调函数作为 props 传递给子组件,子组件调用回调函数以传递数据。

示例:子组件传递数据给父组件

function Child({ sendMessage }) {
  return (
    <button onClick={() => sendMessage("Hello from Child!")}>
      Send Message
    </button>
  );
}

function Parent() {
  const handleMessage = (msg) => {
    alert(msg);
  };

  return <Child sendMessage={handleMessage} />;
}
3. 兄弟组件通信(通过共享父组件状态)

兄弟组件可以通过父组件的状态进行间接通信。


二、Context API:实现全局状态管理

在复杂应用中,层层传递 props 会导致代码冗杂,Context API 提供了一种更简洁的状态共享方式。

1. 创建 Context
import React, { createContext, useContext } from 'react';

const ThemeContext = createContext();

function App() {
  return (
    <ThemeContext.Provider value="dark">
      <Toolbar />
    </ThemeContext.Provider>
  );
}

function Toolbar() {
  return <ThemedButton />;
}

function ThemedButton() {
  const theme = useContext(ThemeContext); // 使用 Context
  return <button className={theme}>I am styled by theme</button>;
}

特点:

  • 全局性:可以跨组件树共享数据。
  • 灵活性:代替繁琐的 props 传递。

三、React Router:路由管理

React Router 用于管理多页面应用中的路由和导航。

1. 安装
npm install react-router-dom
2. 基本用法
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';

function App() {
  return (
    <Router>
      <nav>
        <Link to="/">Home</Link>
        <Link to="/about">About</Link>
      </nav>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </Router>
  );
}

function Home() {
  return <h1>Welcome to Home Page</h1>;
}

function About() {
  return <h1>About Us</h1>;
}

四、高阶组件(HOC)

高阶组件是一种增强组件功能的模式,它本质上是一个接受组件作为参数并返回新组件的函数。

示例:实现一个日志功能的高阶组件
function withLogger(WrappedComponent) {
  return function EnhancedComponent(props) {
    console.log("Props:", props);
    return <WrappedComponent {...props} />;
  };
}

// 使用 HOC
function Hello({ name }) {
  return <h1>Hello, {name}!</h1>;
}

const HelloWithLogger = withLogger(Hello);

五、自定义 Hook

Hooks 是 React 的强大特性,允许在函数组件中复用逻辑。自定义 Hook 使逻辑更加抽象和可复用。

示例:创建一个计时器 Hook
import { useState, useEffect } from 'react';

function useTimer() {
  const [time, setTime] = useState(0);

  useEffect(() => {
    const interval = setInterval(() => setTime((t) => t + 1), 1000);
    return () => clearInterval(interval); // 清理计时器
  }, []);

  return time;
}

function TimerComponent() {
  const time = useTimer();
  return <h1>Time elapsed: {time} seconds</h1>;
}

六、性能优化

React 提供了多种优化性能的方法:

1. 使用 React.memo

防止不必要的组件重新渲染。

const Child = React.memo(function ({ count }) {
  console.log("Rendered");
  return <h1>{count}</h1>;
});
2. 使用 useCallbackuseMemo
  • useCallback:缓存函数引用,减少不必要的渲染。
  • useMemo:缓存计算结果,避免重复计算。

示例:使用 useCallbackuseMemo

import React, { useState, useCallback, useMemo } from 'react';

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

  const expensiveCalculation = useMemo(() => {
    console.log("Calculating...");
    return count * 2;
  }, [count]);

  const handleClick = useCallback(() => setCount(count + 1), [count]);

  return (
    <div>
      <h1>{expensiveCalculation}</h1>
      <button onClick={handleClick}>Increment</button>
    </div>
  );
}

七、实战案例:Todo 应用

1. 创建 Todo 组件
import React, { useState } from 'react';

function TodoApp() {
  const [tasks, setTasks] = useState([]);
  const [input, setInput] = useState("");

  const addTask = () => {
    if (input) {
      setTasks([...tasks, input]);
      setInput("");
    }
  };

  return (
    <div>
      <h1>Todo List</h1>
      <input value={input} onChange={(e) => setInput(e.target.value)} />
      <button onClick={addTask}>Add</button>
      <ul>
        {tasks.map((task, index) => (
          <li key={index}>{task}</li>
        ))}
      </ul>
    </div>
  );
}

八、学习方向建议

  1. 深入了解 Hooks:包括 useReduceruseImperativeHandle 等。
  2. 学习状态管理工具:如 Redux、MobX。
  3. 熟悉服务端渲染:如 Next.js 框架。
  4. 构建全栈项目:将 React 与后端(Node.js、Express、GraphQL)结合。

通过这些进阶学习,你将能够构建更复杂、更高效的 React 应用!

标签:function,return,进阶,React,useState,组件,const,高阶
From: https://blog.csdn.net/B5201234/article/details/144487079

相关文章

  • ReactPress最佳实践—搭建导航网站实战
    Github项目地址:https://github.com/fecommunity/easy-blog欢迎Star。近期,阮一峰在科技爱好者周刊第325期中推荐了一款开源工具——ReactPress,ReactPress一个基于Next.js的博客和CMS系统,可查看demo站点。(@fecommunity投稿)导航站可以通过后台配置分类网站,展示......
  • 2.1.3-2 第二次Reactor代码(百万并发测试过程的报错信息)
    零、概述做服务器性能测试的时候,并发量、QPS(每秒处理多少请求)、时迟(延迟,每个请求多长时间返回)、测试用例(业务代码,发什么数据和回什么数据)这四组都是重要的参数。并发→网络io的并发,是服务端最基础的技能。备注:研发和运营的数据不相同。一、报错信息serverip:192......
  • Electron + React + Monaco Editor + AI 本地代码编辑器实现分析
    1.项目概述1.1核心技术栈前端框架:React编辑器引擎:MonacoEditor桌面框架:ElectronAI模型:Ollama(本地部署)Qwen(通义千问)1.2主要特性本地化AI编程助手多语言代码编辑实时代码补全智能文档生成2.AI模型集成2.1模型对比特性OllamaQwen部署方式纯本地本地/云端......
  • 基于 chat-uikit-react-native 实现一个 React Native 聊天 App
    一、前言本文分享了通过github源码快速实现一个聊天App。二、具体步骤Step1:配置开发环境如果您电脑没有ReactNative开发环境,请先按照ReactNative官网set-up-your-environment配置开发环境.Step2:下载源码Demo源码可前往github下载Step3:获取应用信息......
  • Flutter从入门到高级进阶
    Flutter从入门到高级进阶https://www.bilibili.com/video/BV19x4y1R7LEP1环境搭建P2创建Flutter工程&Flutter优势flutter2.5.3appdart代码module混合开发plugin第三包原生和dartpackage第三包dartname下划线Flutter:效率高!!不依赖UI!!高度统一!!渲染引擎—》Dart......
  • uniCloud云开发视频教程-从基础入门到项目开发实战-uniapp进阶课文章管理系统(云函数/
    uniCloud云开发视频教程-从基础入门到项目开发实战-uniapp进阶课文章管理系统(云函数/云数据库/云存储)https://www.bilibili.com/video/BV1PP411E7qG513894357@qq.comP11.1.uniCloud课程介绍unicloud可老P21.2.新建uniapp项目及创建uniCloud服务空...2022-10-12腾讯云收......
  • React实战技术博客系统
    React实战技术博客系统React实战博客:https://www.bilibili.com/video/BV1CJ411377BP1第01节:React实战视频教程简介P2第02节:前台开发环境的搭建create-next-appnext框架yarnadd@zeit/next-css2019-06-28源码https://gitee.com/lhwz666/react_blogreact_blogyarnadda......
  • React实战复杂共享单车管理项目
    2024React实战复杂共享单车管理项目React18+hooks核心基础到企业级项目开发实战-----【附带源码+接口】https://www.bilibili.com/video/BV1sZ421T7BC 1 2React项目:开发初体验版本稳定....新版特性dszdjdgwdx20131820241.声明式编程告诉“机器”你想要什么(what),让机器去做......
  • ReactNative实战项目演练
    【叩丁狼教育】ReactNative实战项目演练-自学必备https://www.bilibili.com/video/BV15K411s75pP101-移动端app开发方式介绍大致可以分为这3种:nativeapp(原生app:iOS或安卓)webapphybridapp(混合app)P202-RN简介P303-搭建RN环境前的说明P404-python环境的安装P505-ja......
  • 探花交友 React Native 跨端APP项目实战开发
    【2020前端全新项目】探花交友ReactNative跨端APP项目实战开发教程——【黑马程序员广州中心】https://www.bilibili.com/video/BV1e5411L7VV/P11-课程导读老师上课所采用的开发环境如下:1.系统版本window102.开发工具vscode3.ReactNative版本0.62.24.React16.......