官术网_书友最值得收藏!

Component composition

If you have learned any Object-Oriented (OO) language, you may have used inheritance extensively. In JavaScript, this concept is a little bit different. JavaScript inheritance is based on prototypes, and so we call it prototypal inheritance. Functionalities are not copied to the object itself—they are inherited from the prototype of the object and possibly even through other prototypes in the prototype tree. We call this a prototype chain.

However, in React, using inheritance is not very common. Thanks to components, we can embrace another pattern called component composition. Instead of creating a new class and inheriting from the base class, we will create a new parent component that will use its child component to make itself more specific or more powerful. Let's look at an example:

// src/ Chapter 1/ Example_6_Component_composition_red_text/ App.js

const
WarningText = ({style, ...otherProps}) => (
<Text style={[style, {color: 'orange'}]} {...otherProps} />
);

export default class App extends React.Component {
render = () => (
<View style={styles.container}>
<Text style={styles.text}>Normal text</Text>
<WarningText style={styles.text}>Warning</WarningText>
</View>
);
}

The App component is being built out of three components: View, Text, and WarningText. It is a perfect example of how one component, through composition, can reuse the capabilities of others. 

The WarningText component uses composition to enforce the orange text color in the Text component. It makes the generic Text component more specific. Now, we can reuse WarningText in any place of the app where it is necessary. If our app designer decides to alter the warning text, we can quickly adapt to the new design in one place.

Note the implicit pass of a special prop called children. It represents the children of the component. In Example 6_ Component composition - red text, we first pass warning text as children to the  WarningText component and then using the  spread operator it is  passed to the  Text component, which WarningText encapsulates.
主站蜘蛛池模板: 来凤县| 牡丹江市| 灵璧县| 锡林郭勒盟| 陕西省| 临海市| 香港| 江安县| 赫章县| 泾阳县| 西和县| 淮安市| 黑河市| 安徽省| 古田县| 沅陵县| 南召县| 重庆市| 应城市| 布拖县| 洛宁县| 军事| 沙洋县| 湖州市| 玉屏| 十堰市| 方山县| 罗定市| 苗栗县| 郑州市| 金沙县| 阳高县| 四川省| 乐亭县| 阿城市| 绥宁县| 本溪| 库伦旗| 临武县| 思南县| 沙坪坝区|