1.展示型组件
a.展示型组件一般是无状态组件,不需要state
b.一般含有dom标签和样式
c.数据的主要来源是props
d.展示组件一般也被成为傻瓜组件,你通过props往里面传入什么值就能预测到展示结果,就像纯函数
2.容器组件
a.大多不包含标签和样式
b.包含状态
c.通常由高阶组件构成
举个例子:下面这个类很难实现复用,如果要想复用要把容器组件和展示型组件分开才行
class TodoList extends React.Component{
constructor(props){
super(props);
this.state ={
todos:[]
}
this.fetchData = this.fetchData.bind(this);
}
componentDidMount(){
this.fetchData();
}
fetchData(){
fetch('/api/todos').then(data =>{
this.setState({
todos:data
})
})
}
render(){
const {todos} = this.state;
return (<div>
<ul>
{todos.map((item,index)=>{
return <li key={item.id}>{item.name}</li>
})}
</ul>
</div>)
}
}
以下这样子就很容易实现组件的复用
//展示组件
class TodoList extends React.Component{
constructor(props){
super(props);
}
render(){
const {todos} = this.props;
return (<div>
<ul>
{todos.map((item,index)=>{
return <li key={item.id}>{item.name}</li>
})}
</ul>
</div>)
}
//容器组件
class TodoListContainer extends React.Component{
constructor(props){
super(props);
this.state = {
todos:[]
}
this.fetchData = this.fetchData.bind(this);
}
componentDidMount(){
this.fetchData();
}
fetchData(){
fetch('/api/todos').then(data =>{
this.setState({
todos:data
})
})
}
render(){
return (<div>
<TodoList todos={this.state.todos} />
</div>)
}
}
网友评论