diff --git a/src/content/learn/synchronizing-with-effects.md b/src/content/learn/synchronizing-with-effects.md
index cf9611bd27..c959e27752 100644
--- a/src/content/learn/synchronizing-with-effects.md
+++ b/src/content/learn/synchronizing-with-effects.md
@@ -1,10 +1,10 @@
---
-title: '使用 Effect 同步'
+title: '使用 Effect 进行同步'
---
-有些组件需要与外部系统同步。例如,你可能希望根据 React state 控制非 React 组件、设置服务器连接或在组件出现在屏幕上时发送分析日志。Effects 会在渲染后运行一些代码,以便可以将组件与 React 之外的某些系统同步。
+有些组件需要与外部系统同步。例如,你可能希望根据 React state 控制非 React 组件、建立服务器连接或当组件在页面显示时发送分析日志。Effect 允许你在渲染结束后执行一些代码,以便将组件与 React 外部的某个系统相同步。
@@ -14,52 +14,52 @@ title: '使用 Effect 同步'
- Effect 与事件(event)有何不同
- 如何在组件中声明 Effect
- 如何避免不必要地重新运行 Effect
-- 为什么 Effect 在开发环境中会影响两次,如何修复它们
+- 为什么 Effect 在开发环境中会运行两次以及如何解决这个问题
## 什么是 Effect,它与事件(event)有何不同? {/*what-are-effects-and-how-are-they-different-from-events*/}
-在谈到 Effect 之前,你需要熟悉 React 组件中的两种逻辑类型:
+在接触 Effect 之前,你需要熟悉 React 组件中的两种逻辑类型:
-- **渲染逻辑代码**(在 [描述 UI](/learn/describing-the-ui) 中有介绍)位于组件的顶层。你将在这里接收 props 和 state,并对它们进行转换,最终返回你想在屏幕上看到的 JSX。[渲染的代码必须是纯粹的](/learn/keeping-components-pure)——就像数学公式一样,它只应该“计算”结果,而不做其他任何事情。
+- **渲染代码**(在 [描述 UI](/learn/describing-the-ui) 中有介绍)位于组件的顶层。你在这里处理 props 和 state,对它们进行转换,并返回希望在页面上显示的 JSX。[渲染代码必须是纯粹的](/learn/keeping-components-pure)——就像数学公式一样,它只应该“计算”结果,而不做其他任何事情。
-- **事件处理程序**(在 [添加交互性](/learn/adding-interactivity) 中介绍)是嵌套在组件内部的函数,而不仅仅是计算函数。事件处理程序可能会更新输入字段、提交 HTTP POST 请求以购买产品,或者将用户导航到另一个屏幕。事件处理程序包含由特定用户操作(例如按钮点击或键入)引起的“副作用”(它们改变了程序的状态)。
+- **事件处理程序**(在 [添加交互性](/learn/adding-interactivity) 中有介绍)是组件内部的嵌套函数,它们不光进行计算, 还会执行一些操作。事件处理程序可能会更新输入字段、提交 HTTP POST 请求来购买产品,或者将用户导航到另一个页面。事件处理程序包含由特定用户操作(例如按钮点击或输入)引起的“副作用”(它们改变了程序的状态)。
-有时这还不够。考虑一个 `ChatRoom` 组件,它在屏幕上可见时必须连接到聊天服务器。连接到服务器不是一个纯计算(它包含副作用),因此它不能在渲染过程中发生。然而,并没有一个特定的事件(比如点击)导致 `ChatRoom` 被显示。
+有时这还不够。考虑一个 `ChatRoom` 组件,它在页面上显示时必须连接到聊天服务器。连接到服务器并不是纯粹的计算(它是一个副作用),因此它不能在渲染期间发生。然而,并没有一个特定的事件(比如点击)能让 `ChatRoom` 被显示。
-**Effect 允许你指定由渲染本身,而不是特定事件引起的副作用**。在聊天中发送消息是一个“事件”,因为它直接由用户点击特定按钮引起。然而,建立服务器连接是 Effect,因为无论哪种交互致使组件出现,它都会发生。Effect 在屏幕更新后的 [提交阶段](/learn/render-and-commit) 运行。这是一个很好的时机,可以将 React 组件与某个外部系统(如网络或第三方库)同步。
+**Effect 允许你指定由渲染自身,而不是特定事件引起的副作用**。在聊天中发送消息是一个“事件”,因为它直接由用户点击特定按钮引起。然而,建立服务器连接是一个 Effect,因为无论哪种交互致使组件出现,它都应该发生。Effect 在 [提交](/learn/render-and-commit) 结束后、页面更新后运行。此时是将 React 组件与外部系统(如网络或第三方库)同步的最佳时机。
-在本文和后续文本中,`Effect` 在 React 中是专有定义——由渲染引起的副作用。为了指代更广泛的编程概念,也可以将其称为“副作用(side effect)”。
+在本文此处和后续文本中,大写的 `Effect` 是 React 中的专有定义——由渲染引起的副作用。至于更广泛的编程概念(任何改变程序状态或外部系统的行为),我们则使用“副作用(side effect)” 来指代。
## 你可能不需要 Effect {/*you-might-not-need-an-effect*/}
-**不要随意在你的组件中使用 Effect**。记住,Effect 通常用于暂时“跳出” React 代码并与一些 **外部** 系统进行同步。这包括浏览器 API、第三方小部件,以及网络等等。如果你想用 Effect 仅根据其他状态调整某些状态,那么 [你可能不需要 Effect](/learn/you-might-not-need-an-effect)。
+**不要急着在你的组件中使用 Effect**。记住,Effect 通常用于暂时“跳出” React 并与一些 **外部** 系统进行同步。这包括浏览器 API、第三方小部件,以及网络等等。如果你的 Effect 只是根据其他状态来调整某些状态,那么 [你可能并不需要一个 Effect](/learn/you-might-not-need-an-effect)。
## 如何编写 Effect {/*how-to-write-an-effect*/}
-编写 Effect 需要遵循以下三个规则:
+要编写一个 Effect, 请遵循以下三个步骤:
-1. **声明 Effect**。默认情况下,Effect 会在每次 [提交](/learn/render-and-commit) 后都会执行。
-2. **指定 Effect 依赖**。大多数 Effect 应该按需执行,而不是在每次渲染后都执行。例如,淡入动画应该只在组件出现时触发。连接和断开服务器的操作只应在组件出现和消失时,或者切换聊天室时执行。文章将介绍如何通过指定依赖来控制如何按需执行。
-3. **必要时添加清理(cleanup)函数**。有时 Effect 需要指定如何停止、撤销,或者清除它的效果。例如,“连接”操作需要“断连”,“订阅”需要“退订”,“获取”既需要“取消”也需要“忽略”。你将学习如何使用 **清理函数** 来做到这一切。
+1. **声明 Effect**。通常 Effect 会在每次 [提交](/learn/render-and-commit) 后运行。
+2. **指定 Effect 依赖**。大多数 Effect 应该按需运行,而不是在每次渲染后都运行。例如,淡入动画应该只在组件出现时触发。连接和断开服务器的操作只应在组件出现和消失时,或者切换聊天室时执行。你将通过指定 **依赖项** 来学习如何控制这一点。
+3. **必要时添加清理操作**。一些 Effect 需要指定如何停止、撤销,或者清除它们所执行的操作。例如,“连接”需要“断开”,“订阅”需要“退订”,而“获取数据”需要“取消”或者“忽略”。你将学习如何通过返回一个 **清理函数** 来实现这些。
-以下是具体步骤。
+让我们详细看看每一步。
### 第一步:声明 Effect {/*step-1-declare-an-effect*/}
-首先在 React 中引入 [`useEffect` Hook](/reference/react/useEffect):
+先从 React 中导入 [`useEffect` Hook](/reference/react/useEffect):
```js
import { useEffect } from 'react';
```
-然后,在组件顶部调用它,并传入在每次渲染时都需要执行的代码:
+再在组件顶部调用, 并在其中加入一些代码:
```js {2-4}
function MyComponent() {
@@ -70,15 +70,15 @@ function MyComponent() {
}
```
-每当你的组件渲染时,React 将更新屏幕,然后运行 `useEffect` 中的代码。换句话说,**`useEffect` 会把这段代码放到屏幕更新渲染之后执行**。
+每当你的组件渲染时,React 会先更新页面,然后再运行 `useEffect` 中的代码。换句话说,**`useEffect` 会“延迟”一段代码的运行,直到渲染结果反映在页面上**。
-让我们看看如何使用 Effect 与外部系统同步。考虑一个 `` React 组件。通过传递布尔类型的 `isPlaying` prop 以控制是播放还是暂停:
+接下来,让我们看看如何使用 Effect 来与外部系统同步。考虑一个 `` React 组件。我们想要通过传递一个 `isPlaying` prop 来控制它播放或者暂停:
```js
;
```
-自定义的 `VideoPlayer` 组件渲染了内置的 [`