前言
上一节实战中,我们使用 class component
创建了一个表示天气信息的组件。
这一节我们将创建更多组件,并将所有组件组合。
封装组件
上一节的实例代码可以进行如下修改:
import React from 'react';
import './style.css';
class RealTime extends React.Component {
render() {
return (
<div className="RealTime">
<div className="temp">-2°</div>
<div className="weather">晴</div>
<div className="wind">北风 2级</div>
<div className="humidity">湿度 66%</div>
</div>
);
}
}
const App = () => (
<div>
<RealTime />
</div>
);
export default App;
我们将 RealTime
相关的内容抽离了出来单独封装了一个组件,这样的复用性更强。
需要注意的是,组件调用时如:<RealTime></<RealTime>
可简写为自闭合组件 <RealTime />
。
编写更多组件
我们再来实现一个未来1天内温度分布表组件。
class Details extends React.Component {
render() {
return (
<div className="Details">
<div className="time">01:00</div>
<div className="weather">阴</div>
<div className="temperature">-1°</div>
</div>
);
}
}
class WeatherDetails extends React.Component {
render() {
return (
<div className="WeatherDetails">
<Details />
<Details />
<Details />
<Details />
<Details />
<Details />
<Details />
<Details />
</div>
);
}
}
在写一个展示各项生活指数的组件
class Indexes extends React.Component {
render() {
const Index = () => (
<div className="Index">
<div className="level">适宜</div>
<div className="name">洗车指数</div>
</div>
);
return (
<div className="Indexes">
<Index />
<Index />
<Index />
<Index />
<Index />
<Index />
</div>
);
}
}
总结
组件和组件可以结合在一起,组件的内部又可以使用其他组件,这样组合嵌套后,就构成了一个所谓的组件树。
之前的实战中 App
内使用了三个组件 <RealTime />
<WeatherDetails />
<Indexes />
。
其中 <WeatherDetails />
又使用了组件 <Details />
。<Indexes />
内部使用了函数式组件 <Index />
。
我们希望设计组件时能保证组件的专一性即:一个组件只专注做一件事
一个复杂的功能如果可以拆分成等多个小功能,那就可以将每个小功能封装成一个组件,然后通过组件的嵌套/组合实现复杂功能。
当然也不是拆分的越细、颗粒度越小越好,能控制在一个可控的范围内即可。