【发布时间】:2019-09-23 22:22:32
【问题描述】:
我正在学习 ReactJS,我了解到有 UI 组件和容器组件。容器组件是使用classes 扩展React.Component 实现的,并包含state 和旧的render 方法,而UI 组件是使用functions 创建的,它们只关心UI,因为它们只从props.
无状态功能组件示例:
const Ninjas = (props) => {
const { ninjas } = props;
const ninjalist = ninjas.map((x) => {
var divStyle = {
color: getRandomColor(),
};
return (
<div className="ninja" key={x.key} style={divStyle}>
<p>Name: {x.name}</p>
<p>Age: {x.age}</p>
<p>Belt: {x.belt}</p>
</div>
);
});
return <div className="ninja-list">{ninjalist}</div>;
};
export default Ninjas;
与容器组件相同的示例
export default class Ninjas extends Component {
getRandomColor = () => {
....
return color;
};
render() {
const { ninjas } = this.props;
const ninjalist = ninjas.map((x) => {
var divStyle = {
color: this.getRandomColor(),
};
return (
<div className="ninja" key={x.key} style={divStyle}>
<p>Name: {x.name}</p>
<p>Age: {x.age}</p>
<p>Belt: {x.belt}</p>
</div>
);
});
return <div className="ninja-list">{ninjalist}</div>;
}
}
所以我的问题是,当我们可以轻松完成与容器组件相同的事情时,为什么还要费心制作 UI 组件(不使用容器组件中使用的 render 方法)。
【问题讨论】:
-
我认为您正在尝试比较无状态功能组件与基于类的组件,“容器组件”是一个重载术语。参见例如stackoverflow.com/q/36097965/3001761
-
是的@jonrsharpe,这正是我想要做的。你还可以回答我的问题吗?谢谢!
-
一种 React 模式是将功能与表示分离,这意味着您使用管理状态的容器组件和简单呈现状态的 UI 组件。每个组件过去都是基于类的,而 UI 组件只是新功能组件的完美用例。
标签: javascript reactjs components