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

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.
主站蜘蛛池模板: 平度市| 凤山市| 余庆县| 汽车| 从化市| 门源| 新丰县| 化隆| 松江区| 留坝县| 永定县| 本溪| 建昌县| 浦北县| 海林市| 中山市| 正安县| 册亨县| 邮箱| 阳曲县| 阜康市| 石家庄市| 石渠县| 太仆寺旗| 陆川县| 巩义市| 长汀县| 临城县| 安顺市| 星座| 敦化市| 资兴市| 古丈县| 甘德县| 尉犁县| 塔河县| 太湖县| 舟山市| 湘潭市| 灵寿县| 海淀区|