Skip to content

Commit 1a0e0a5

Browse files
robertyingQC-L
authored andcommitted
docs(cn): refine Composition vs Inheritance & remove control chars (#109)
1 parent 6abd3d5 commit 1a0e0a5

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

content/docs/composition-vs-inheritance.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ next: thinking-in-react.html
1010

1111
React 有十分强大的组合模式。我们推荐使用组合而非继承来实现组件间的代码重用。
1212

13-
在这篇文档中,我们将展示 React 初学者倾向于使用继承来解决的几个问题,并给出使用组合的思想来解决这些问题的方法
13+
在这篇文档中,我们将考虑初学 React 的开发人员使用继承时经常会遇到的一些问题,并展示如何通过组合思想来解决这些问题
1414

1515
## 包含关系 {#containment}
1616

17-
有些组件无法提前知晓它们的子组件。`Sidebar`(侧边栏)和 `Dialog`(对话框)等代表一般容器(box)的组件就是很好的例子
17+
有些组件无法提前知晓它们子组件的具体内容。在 `Sidebar`(侧边栏)和 `Dialog`(对话框)等展现通用容器(box)的组件中特别容易遇到这种情况
1818

19-
我们建议这些组件使用一个特殊的 `children` prop 来将他们的子组件输出到渲染结果中
19+
我们建议这些组件使用一个特殊的 `children` prop 来将他们的子组件传递到渲染结果中
2020

2121
```js{4}
2222
function FancyBorder(props) {
@@ -28,7 +28,7 @@ function FancyBorder(props) {
2828
}
2929
```
3030

31-
这使得别的组件可以通过 JSX 嵌套将任意组件作为子组件传递给它们
31+
这使得别的组件可以通过 JSX 嵌套,将任意组件作为子组件传递给它们
3232

3333
```js{4-9}
3434
function WelcomeDialog() {
@@ -47,9 +47,9 @@ function WelcomeDialog() {
4747

4848
**[在 CodePen 上尝试](https://codepen.io/gaearon/pen/ozqNOV?editors=0010)**
4949

50-
`<FancyBorder>` JSX 标签中的所有内容都会作为一个 `children` prop 传递给 `FancyBorder` 组件。因为 `FancyBorder``{props.children}` 渲染在一个 `<div>` 中,被传递的这些子组件最终都会出现在输出结果中。
50+
`<FancyBorder>` JSX 标签中的所有内容都会作为一个 `children` prop 传递给 `FancyBorder` 组件。因为 `FancyBorder``{props.children}` 渲染在一个 `<div>` 中,被传递的这些子组件最终都会出现在输出结果中。
5151

52-
有些情况下,你可能需要在一个组件中留出几个“洞”。尽管这种情况相对少见,但是你不需要拘泥于单一的 `children`还可以自主设计相应的 props 和“洞”的位置来进行组件组合
52+
少数情况下,你可能需要在一个组件中预留出几个“洞”。这种情况下,我们可以不使用 `children`而是自行约定:将所需内容传入 props,并使用相应的 prop
5353

5454
```js{5,8,18,21}
5555
function SplitPane(props) {
@@ -80,13 +80,13 @@ function App() {
8080

8181
[**在 CodePen 上尝试**](https://codepen.io/gaearon/pen/gwZOJp?editors=0010)
8282

83-
`<Contacts />``<Chat />` 之类的 React 元素本质就是对象(object),所以你可以把它们当作 props,像其他数据一样传递。这种方法可能使你想起别的库中“槽”(slot)的概念,但在 React 中你可以将任何东西作为 props 进行传递,没有限制
83+
`<Contacts />``<Chat />` 之类的 React 元素本质就是对象(object),所以你可以把它们当作 props,像其他数据一样传递。这种方法可能使你想起别的库中“槽”(slot)的概念,但在 React 中没有“槽”这一概念的限制,你可以将任何东西作为 props 进行传递。
8484

8585
## 特例关系 {#specialization}
8686

8787
有些时候,我们会把一些组件看作是其他组件的特殊实例,比如 `WelcomeDialog` 可以说是 `Dialog` 的特殊实例。
8888

89-
在 React 中,我们也可以通过组合来实现这一点。“特殊”组件可以通过 props 定制并渲染“一般”组件:
89+
在 React 中,我们也可以通过组合来实现这一点。“特殊”组件可以通过 props 定制并渲染“一般”组件:
9090

9191
```js{5,8,16-18}
9292
function Dialog(props) {
@@ -167,6 +167,6 @@ class SignUpDialog extends React.Component {
167167

168168
在 Facebook,我们在成百上千个组件中使用 React。我们并没有发现需要使用继承来构建组件层次的情况。
169169

170-
Props 和组合为你提供了清晰而安全地定制组件外观和行为的灵活方式。注意:组件可以接受任意 props,包括基本数据类型,React 元素以及函数。
170+
Props 和组合为你提供了清晰而安全地定制组件外观和行为的灵活方式。注意:组件可以接受任意 props,包括基本数据类型,React 元素以及函数。
171171

172-
如果你想要在组件间复用非 UI 的功能,我们建议将其提取为一个单独的 JavaScript 模块,如函数、对象或者类。组件可以直接引入(import)而无需扩展它们
172+
如果你想要在组件间复用非 UI 的功能,我们建议将其提取为一个单独的 JavaScript 模块,如函数、对象或者类。组件可以直接引入(import)而无需通过 extend 继承它们

0 commit comments

Comments
 (0)