ReactJS 教程

ReactJS - 主页 ReactJS - 简介 ReactJS - 路线图 ReactJS - 安装 ReactJS - 功能 ReactJS - 优势和缺点 ReactJS - 架构 ReactJS - 创建 React 应用程序 ReactJS - JSX ReactJS - 组件 ReactJS - 嵌套组件 ReactJS - 使用组件 ReactJS - 集合组件 ReactJS - 样式 ReactJS - 属性 (props) ReactJS - 使用属性创建组件 ReactJS - props 验证 ReactJS - 构造函数 ReactJS - 组件生命周期 ReactJS - 事件管理 ReactJS - 创建事件感知组件 ReactJS - Expense Manager 事件 ReactJS - 状态管理 ReactJS - 状态管理 API ReactJS - 无状态组件 ReactJS - Hooks 进行状态管理 ReactJS - Hooks 的组件生命周期 ReactJS - 布局组件 ReactJS - 分页 ReactJS - Material UI ReactJS - Http 客户端编程 ReactJS - 表单编程 ReactJS - 受控组件 ReactJS - 非受控组件 ReactJS - Formik ReactJS - 条件渲染 ReactJS - 列表 ReactJS - Key 键 ReactJS - 路由 ReactJS - Redux ReactJS - 动画 ReactJS - Bootstrap ReactJS - Map ReactJS - 表格 ReactJS - 使用 Flux 管理状态 ReactJS - 测试 ReactJS - CLI 命令 ReactJS - 构建和部署 ReactJS - 示例

Hooks

ReactJS - Hooks 简介 ReactJS - 使用 useState ReactJS - 使用 useEffect ReactJS - 使用 useContext ReactJS - 使用 useRef ReactJS - 使用 useReducer ReactJS - 使用 useCallback ReactJS - 使用 useMemo ReactJS - 自定义 Hooks

ReactJS 高级

ReactJS - 可访问性 ReactJS - 代码拆分 ReactJS - 上下文 ReactJS - 错误边界 ReactJS - 转发 Refs ReactJS - 片段 ReactJS - 高阶组件 ReactJS - 与其他库集成 ReactJS - 优化性能 ReactJS - Profiler API ReactJS - Portals ReactJS - 不使用 ES6 ECMAScript ReactJS - 不使用 JSX 的 React ReactJS - Reconciliation ReactJS - Refs 和 DOM ReactJS - 渲染道具 ReactJS - 静态类型检查 ReactJS - 严格模式 ReactJS - Web 组件

其他概念

ReactJS - 日期选择器 ReactJS - Helmet ReactJS - 内联样式 ReactJS - PropTypes ReactJS - BrowserRouter ReactJS - DOM ReactJS - 轮播 ReactJS - 图标 ReactJS - 表单组件 ReactJS - 参考 API

ReactJS 有用资源

ReactJS - 快速指南 ReactJS - 备忘录 Axios - 备忘录 ReactJS - 有用资源 ReactJS - 讨论


ReactJS - 使用客户端指令

指令类似于详细说明。在使用 React 服务器组件或创建与其配合使用的内容(例如库)时,它们是必需的。

一种形式的指令称为"使用客户端"。这表示代码的哪些部分在客户端执行,这类似于我们的 Web 浏览器。

另一个选项是"使用服务器"。它定义了可以从在 Web 浏览器中运行的客户端代码调用的服务器端函数。这些指令确保 React 服务器组件中的所有内容顺利运行。

因此,我们将在本教程中讨论"使用客户端"。

什么是使用客户端?

术语"使用客户端"是指在 React 服务器组件中使用或创建与其交互的内容时使用的特定指令。它有助于确定代码的哪些部分在客户端执行,类似于我们的 Web 浏览器。

用法

要使用"use client",只需将其放在文件的开头,在任何其他代码或导入之前。应使用单引号或双引号,但不要使用反引号。

import { useState } from 'react';

何时应使用"use client"?

处理 React 服务器组件时,使用"use client"来区分在服务器上运行的代码和在客户端上运行的代码。

示例

示例 −交互性和状态构建

因此,我们将创建一个包含两个页面的简单导航菜单组件:"主页"和"关于"。

为了确保它在客户端运行,我们将创建一个使用"使用客户端"的 NavigationMenu 组件。该组件将具有两个页面的导航按钮:"主页"和"关于"。它将根据用户的选择显示特定于所选页面的内容。这将是一个简单的导航菜单,允许用户在网站的不同区域之间导航。

"use client";
import React, { useState } from "react";
export default function NavigationMenu() {
   const [currentPage, setCurrentPage] = useState("Home");   
   const navigateToHome = () => setCurrentPage("Home");
   const navigateToAbout = () => setCurrentPage("About");   
   return (
      <div>
         <h1>Navigation Menu</h1>
         <ul>
            <li>
               <button onClick={navigateToHome}>Home</button>
            </li>
            <li>
               <button onClick={navigateToAbout}>About</button>
            </li>
         </ul>
         <div>
            {currentPage === "Home" && <p>Welcome to the Home Page!</p>}
            {currentPage === "About" && (
               <p>Learn more about us on the About Page.</p>
            )}
         </div>
      </div>
   );
}

输出

navigation menu

示例 − 使用客户端 API

这是另一个示例代码,它使用"使用客户端"指令创建一个只能在浏览器中运行的简单功能 −

'use client';

import React, { useRef, useLayoutEffect } from 'react';

export default function VideoPlayer() {
   const videoRef = useRef(null);
   
   useLayoutEffect(() => {
      const video = videoRef.current;
      if (video) {
         // 组件加载时播放视频
         video.play().catch((error) => {
            console.error('Error playing video: ' + error);
         });
      }
   });
   
   return (
      <video ref={videoRef} controls>
         <source src="your-video.mp4" type="video/mp4" />
         The browser does not support the video tag.
      </video>
   );
}

输出

video app

使用第三方库的示例 −

在我们的 React 应用中,我们经常使用其他人提供的预制代码片段(称为第三方库),以帮助完成常见任务或使我们的应用看起来更好并且运行得更好。

有时,这些库会使用 React 的特定部分。如果这样做,它们需要在客户端运行。这对于使用创建上下文、某些 React 函数或需要使用浏览器功能的库来说很重要。

如果库已更新以与 React 服务器组件配合使用,它将已经具有"使用客户端"标记,这意味着可以使用。但是如果它尚未更新,或者我们需要添加自己的特殊设置才能使库正常工作,我们可能需要在库和主代码之间创建一个客户端组件文件,以确保它在 React 服务器组件中正确运行。这样,库就可以使用它所需的所有浏览器功能。

我们将展示如何在 React 项目中使用第三方库,以及如果库尚未针对 React 服务器组件进行更新,为什么我们需要创建客户端组件文件 −

假设我们想将第三方日期选择器库放入我们的 React 应用程序中。由于此库依赖浏览器功能来显示和选择日期,因此它需要在客户端运行。

创建一个名为"DatePickerClient.js"的客户端组件文件并在其中使用"use client"指令。

'use client';

import React, { useState } from "react";
import DatePicker from "react-datepicker";

export default function DatePickerClient () {
   const [startDate, setStartDate] = useState(new Date());
   return (
      <DatePicker selected={startDate} onChange={(date) => setStartDate(date)} />
   );
};

我们将在主要 React 组件 App.js 中导入并使用 DatePickerClient 组件,我们将在其中使用日期选择器。这允许第三方日期选择器库在使用浏览器功能时正常运行。

import DatePickerClient from './DatePickerClient';

export default function App() {
   return (
      <div>
         <h1>Today's Date is</h1>
         <DatePickerClient />
      </div>
   );
}

输出

today date

"DatePickerClient"客户端组件充当第三方日期选择器库和 React 服务器组件环境之间的中介。它确保库可以使用浏览器的日期选择功能。

限制

  • 如果从另一个要在客户端上运行的文件导入标有"使用客户端"的文件,"使用客户端"不会执行任何操作。只有当我们在主文件中使用它时,它才会起作用。

  • 如果组件文件有"使用客户端",那么任何时候我们使用该组件,它都保证是客户端组件。但是,即使没有"使用客户端",组件仍然可以在客户端运行。

  • 某个组件是客户端组件还是服务器组件取决于它的使用位置。如果它在带有"使用客户端"的文件中或在链接到带有"使用客户端"的文件中使用,则它为客户端组件。否则,它为服务器组件。

  • "使用客户端"不仅适用于组件。客户端模块内的任何代码都将被发送到客户端并在客户端运行。它不仅限于组件。

  • 如果用于服务器端的文件从"使用客户端"文件导入某些内容,则它导入的内容必须是 React 组件或可以传递给客户端组件的支持数据。其他任何内容都会导致错误。

摘要

因此,"使用客户端"是管理 React 服务器组件中代码的有用工具。它确保在客户端执行正确的代码,从而提高我们的 Web 应用程序的性能和交互性。只需将其放在文件的开头,我们就可以为我们的 React 应用程序构建高效的客户端代码。

reactjs_reference_api.html