- 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 APP中引入事件
- ReactJS - 状态管理
- ReactJS - 状态管理 API
- ReactJS - 无状态组件
- ReactJS - 使用 React Hooks 进行状态管理
- ReactJS - 使用 React 钩子的组件生命周期
- ReactJS - 组件的布局
- ReactJS - 分页
- ReactJS - Material 用户界面
- ReactJS - Http 客户端编程
- ReactJS - 表单编程
- ReactJS - 受控组件
- ReactJS - 不受控制的组件
- ReactJS - Formik
- ReactJS - 条件渲染
- ReactJS - 列表
- ReactJS - 键
- ReactJS - 路由
- ReactJS - 冗余
- ReactJS - 动画
- ReactJS - 引导程序
- ReactJS - 地图
- ReactJS - 表格
- ReactJS - 使用 Flux 管理状态
- ReactJS - 测试
- ReactJS - CLI 命令
- ReactJS - 构建和部署
- ReactJS - 示例
- ReactJS - 钩子简介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定义钩子
- ReactJS - 可访问性
- ReactJS - 代码拆分
- ReactJS - 上下文
- ReactJS - 错误边界
- ReactJS - 转发引用
- ReactJS - 片段
- ReactJS - 高阶组件
- ReactJS - 与其他库集成
- ReactJS - 优化性能
- ReactJS - 分析器 API
- ReactJS - 门户
- ReactJS - 没有 ES6 ECMAScript 的 React
- ReactJS - 没有 JSX 的 React
- ReactJS - 协调
- ReactJS - 引用和 DOM
- ReactJS - 渲染属性
- ReactJS - 静态类型检查
- ReactJS - 严格模式
- ReactJS - Web 组件
- ReactJS - 日期选择器
- ReactJS - Helmet
- ReactJS - 内联样式
- ReactJS - 属性类型
- ReactJS - 浏览器路由器
- ReactJS - DOM
- ReactJS - 旋转木马
- ReactJS - 图标
- ReactJS - 表单组件
- ReactJS - 参考 API
ReactJS - use client directive
指令类似于详细说明。在使用 React 服务器组件或创建与它们一起工作的东西(例如库)时,它们是必需的。
一种形式的指令称为“use client ”。这表明代码的哪些部分在客户端执行,这类似于我们的 Web 浏览器。
另一个选项是“use server”。它定义了可以从客户端代码中调用的服务器端函数,这些代码在我们的 Web 浏览器中运行。这些指令确保 React 服务器组件中的所有内容都能顺利运行。
因此,我们将在本教程中讨论“use client ”。
什么是use client ?
术语“use client ”是指在 React 服务器组件中使用的特定指令,或者在创建与它们交互的东西时使用的特定指令。它有助于弄清楚代码的哪些部分在客户端执行,类似于我们的 Web 浏览器。
用法
要使用“use client”,只需将其放在文件的开头,在任何其他代码或导入之前。应使用单引号或双引号,但不能使用反引号。
import { useState } from 'react';
什么时候应该使用“use client”?
在处理 React 服务器组件时,使用“use client”来区分在服务器上运行的代码和在客户端上运行的代码。
例子
示例 - 交互性和状态构建
因此,我们将创建一个简单的导航菜单组件,其中包含两个页面:“主页”和“关于”。
为了确保它在客户端运行,我们将创建一个使用 '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>
);
}
输出
示例 - use client API
这是另一个示例代码,它使用“use client”指令来创建只能在浏览器中运行的简单功能 -
'use client';
import React, { useRef, useLayoutEffect } from 'react';
export default function VideoPlayer() {
const videoRef = useRef(null);
useLayoutEffect(() => {
const video = videoRef.current;
if (video) {
// Play a video when the component loads
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>
);
}
输出
示例 - 使用第三方库
在我们的 React 应用程序中,我们经常使用来自其他人的预制代码片段(称为第三方库)来帮助完成常见任务或使我们的应用程序看起来和运行得更好。
有时,这些库使用 React 的特定部分。如果他们这样做,他们需要在客户端运行。这对于使用诸如创建上下文、某些 React 函数或需要使用浏览器功能之类的东西的库来说很重要。
如果一个库被更新为与React Server Components一起工作,它将已经有了“use client ”标记,这意味着它很好。但是,如果它没有被更新,或者我们需要添加我们自己的特殊设置才能使库正常工作,我们可能需要在库和我们的主代码之间创建一个客户端组件文件,以确保它在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)} />
);
};
我们将在名为 App.js 的主 React 组件中导入并使用 DatePickerClient 组件,我们希望在其中使用日期选择器。这允许第三方日期选取器库在使用浏览器功能时正常运行。
import DatePickerClient from './DatePickerClient';
export default function App() {
return (
<div>
<h1>Today's Date is</h1>
<DatePickerClient />
</div>
);
}
输出
“DatePickerClient”客户端组件充当第三方日期选择器库和 React 服务器组件环境之间的中介。它确保库可以使用浏览器的日期选择功能。
局限性
- 如果从另一个要在客户端上运行的文件导入了标记为“use client”的文件,则“use client”不会执行任何操作。只有当我们在主文件中使用它时,它才计算在内。
- 如果组件文件具有“use client ”,则无论何时我们使用该组件,都可以保证它是客户端组件。但是,即使没有“use client ”,组件仍然可以在客户端运行。
- 某物是客户端组件还是服务器组件取决于它的使用位置。如果它用于带有“use client”的文件或链接到带有“use client”的文件,则它是客户端组件。否则,它是一个服务器组件。
- “use client ”不仅适用于组件。客户端模块中的任何代码都将发送到客户端并在客户端运行。它不限于组件。
- 如果一个用于服务器端的文件从“use client ”文件导入某些内容,那么它导入的内容必须是 React 组件或可以传递给客户端组件的支持数据。任何其他内容都会导致错误。
总结
因此,“use client ”是管理 React 服务器组件中代码的有用工具。它确保在客户端执行正确的代码,从而提高我们 Web 应用程序的性能和交互性。只需将其保留在文件的开头,我们就可以为我们的 React 应用程序构建高效的客户端代码。