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

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.
主站蜘蛛池模板: 朔州市| 江孜县| 专栏| 惠州市| 沛县| 两当县| 盈江县| 临安市| 榆中县| 海林市| 建瓯市| 东安县| 海兴县| 安溪县| 禹州市| 祥云县| 班戈县| 尉犁县| 濉溪县| 保康县| 宁远县| 沂南县| 双流县| 泸西县| 阿勒泰市| 竹北市| 社会| 吉林省| 南陵县| 静安区| 桦南县| 湟中县| 宜宾县| 阳谷县| 牙克石市| 双城市| 西充县| 洛宁县| 平泉县| 城口县| 乐山市|