@@ -3,11 +3,12 @@ title: render()
3
3
translators :
4
4
- liu-jin-yi
5
5
- QC-L
6
+ - Neo42
6
7
---
7
8
8
9
<Intro >
9
10
10
- ` render ` 函数会将 [ JSX] ( /learn/writing-markup-with-jsx ) (“React 元素”)渲染到浏览器 DOM 容器节点中。它可以让 React 改变 ` container ` 中 DOM,使其与传递的 JSX 相匹配。
11
+ ` render ` 函数会将一段 [ JSX] ( /learn/writing-markup-with-jsx ) (“React 元素”)渲染到浏览器 DOM 容器节点中。它会指引 React 改变 ` container ` 中的 DOM,使其与所传递的 JSX 相匹配。
11
12
12
13
``` js
13
14
render (< App / > , container);
@@ -18,19 +19,19 @@ render(<App />, container, callback);
18
19
19
20
## 渲染根组件 {/* rendering-the-root-component* /}
20
21
21
- 如需调用 ` render ` ,需要编写一段 JSX 代码以及一个 DOM 容器:
22
+ 如需调用 ` render ` ,你需要编写一段 JSX 代码以及一个 DOM 容器:
22
23
23
24
<APIAnatomy >
24
25
25
- <AnatomyStep title =" React element " >
26
+ <AnatomyStep title =" React 元素 " >
26
27
27
28
需要渲染的 UI 界面。
28
29
29
30
</AnatomyStep >
30
31
31
- <AnatomyStep title =" DOM container " >
32
+ <AnatomyStep title =" DOM 容器 " >
32
33
33
- 用于渲染 UI 界面的 DOM 节点。该容器不能被修改,只能修改它的子节点 。
34
+ 用于渲染 UI 界面的 DOM 节点。容器本身不会被修改,只有其子节点会被修改 。
34
35
35
36
</AnatomyStep >
36
37
@@ -41,7 +42,7 @@ render(<App />, container);
41
42
42
43
</APIAnatomy >
43
44
44
- 在完全由 React 构建的应用程序中,你需要在你的应用程序的入口文件执行该操作(渲染 "root" 组件) 。
45
+ 在完全使用 React 构建的应用程序中,你需要在应用程序的最顶层执行一次该操作——渲染“根”组件 。
45
46
46
47
<Sandpack >
47
48
@@ -65,7 +66,7 @@ export default function App() {
65
66
66
67
## 渲染多个根组件 {/* rendering-multiple-roots* /}
67
68
68
- 不管你用 [ "哪种方式 "] ( /learn/add-react-to-a-website ) 使用 React,你都需为每个由 React 管理的顶层 UI 组件调用 ` render ` 函数进行渲染 。
69
+ 如果你在多个地方都散布了 React [ "碎片 "] ( /learn/add-react-to-a-website ) ,那么你就得为每个由 React 管理的顶层 UI 组件调用 ` render ` 函数 。
69
70
70
71
<Sandpack >
71
72
@@ -97,8 +98,8 @@ render(
97
98
export function Navigation () {
98
99
return (
99
100
< ul>
100
- < NavLink href= " /" > Home < / NavLink>
101
- < NavLink href= " /about" > About < / NavLink>
101
+ < NavLink href= " /" > 首页 < / NavLink>
102
+ < NavLink href= " /about" > 关于 < / NavLink>
102
103
< / ul>
103
104
);
104
105
}
@@ -114,9 +115,9 @@ function NavLink({ href, children }) {
114
115
export function Comments () {
115
116
return (
116
117
<>
117
- < h2> Comments < / h2>
118
+ < h2> 评论 < / h2>
118
119
< Comment text= " 你好!" author= " Sophie" / >
119
- < Comment text= " 你是谁 ?" author= " Sunil" / >
120
+ < Comment text= " 你好吗 ?" author= " Sunil" / >
120
121
< / >
121
122
);
122
123
}
@@ -137,9 +138,9 @@ nav ul li { display: inline-block; margin-right: 20px; }
137
138
138
139
<br />
139
140
140
- ## 更新已渲染的 DOM {/* updating-the-rendered-tree* /}
141
+ ## 更新已渲染的组件树 {/* updating-the-rendered-tree* /}
141
142
142
- 你可以在同一 DOM 节点上多次调用 ` render ` 。只要组件树结构与之前渲染的内容一致,React 就会 [ 保留该状态 ] ( /learn/preserving-and-resetting-state ) 。请仔细观察在输入框中输入内容后的效果:
143
+ 你可以在同一 DOM 节点上多次调用 ` render ` 。只要组件树结构与之前渲染的内容一致,React 就会 [ 保留 state ] ( /learn/preserving-and-resetting-state ) 。请仔细观察在输入框中输入内容后的效果:
143
144
144
145
<Sandpack >
145
146
@@ -161,7 +162,7 @@ setInterval(() => {
161
162
export default function App ({counter}) {
162
163
return (
163
164
<>
164
- < h1> Hello, world ! {counter}< / h1>
165
+ < h1> 你好,世界 ! {counter}< / h1>
165
166
< input placeholder= " 在这里输入一些东西" / >
166
167
< / >
167
168
);
@@ -170,22 +171,22 @@ export default function App({counter}) {
170
171
171
172
</Sandpack >
172
173
173
- 你可以使用 [ ` unmountComponentAtNode() ` ] ( TODO ) 来销毁已渲染的 DOM 树 。
174
+ 你可以使用 [ ` unmountComponentAtNode() ` ] ( TODO ) 来销毁已被渲染的组件树 。
174
175
175
176
<br />
176
177
177
178
## 何时不使用它 {/* when-not-to-use-it* /}
178
179
179
180
* 如果你的应用程序使用服务器渲染,并会在服务器上生成 HTML,请使用 [ ` hydrate ` ] ( TODO ) 函数,而非 ` render ` 函数。
180
- * 如果你的应用程序完全基于 React 构建,你大概率不需要多次使用 ` render ` 函数。如果你想在 DOM 树的其他位置渲染内容(例如,modal 或者 tooltip),那么请使用 [ ` createPortal ` ] ( TODO ) 来代替。
181
+ * 如果你的应用程序完全基于 React 构建,那么你其实不需要多次使用 ` render ` 函数。如果你想在 DOM 树的其他位置渲染内容(例如,modal 或者 tooltip),那么请使用 [ ` createPortal ` ] ( TODO ) 来代替。
181
182
182
183
<br />
183
184
184
185
185
- ## 行为细节 {/* behavior-in-detail* /}
186
+ ## 细节特性 {/* behavior-in-detail* /}
186
187
187
- 在你第一次调用 ` render ` 时,` container ` 内的任何已有 DOM 元素都会被替换。如果你再次调用 ` render ` 时 ,React 将会通过与先前渲染的组件树 [ "匹配" ] ( /learn/preserving-and-resetting-state ) 的方式,来决定 DOM 的哪些部分可以重用,哪些需要重新创建。 重复调用 ` render ` 与调用 ` setState ` 效果类似。无论哪种情况 ,React 都会避免不必要的 DOM 更新。
188
+ 在你第一次调用 ` render ` 时,` container ` 内任何已有的 DOM 元素都会被替换。如果你再次调用 render 的话 ,React 会为了体现最新的 JSX 而进行必要的 DOM 更新。React 会通过将 DOM 与先前渲染的组件树进行“匹配”的方式来决定 DOM 的哪些部分可以复用、哪些部分需要重新创建。 重复调用 render 与调用 setState 相似——在这两种情况下 ,React 都会避免不必要的 DOM 更新。
188
189
189
- 你可以将一个回调函数,作为 ` render ` 的第三个参数 。React 会在你的组件在 DOM 中出现后,调用它 。
190
+ 你可以将一个回调函数作为第三个参数传递给 render。React 会在你的组件在 DOM 中出现后调用它 。
190
191
191
- 如果需要渲染 ` <MyComponent /> ` ,并且 ` MyComponent ` 是一个类组件,` render ` 函数将返回该类的实例 。在其他情况下,它将返回 ` null ` 。
192
+ 如果你渲染了一个 ` <MyComponent /> ` ,并且 ` MyComponent ` 是一个类组件,那么 ` render ` 函数就会返回该类的实例 。在其他情况下,它将返回 ` null ` 。
0 commit comments