我没有声明,但它确实有逻辑。 一个简单的映射。 使其无状态的过程是什么?
import React from 'react';
import BMFave from './BMFave.jsx';
class BMTag extends React.Component {
constructor(props) {
super(props);
}
render () {
const bookmarks = this.props.bookmarks.map((bookmark) =>
<BMFave bookmark={bookmark} key={bookmark.id} />
);
return (
<div className="bookmark_page" id="{this.props.tag}" >
<div className="bookmark_tag_title">
<p className="bookmark_tag_title_p">
{this.props.tag}
</p>
</div>
{bookmarks}
</div>
)
}
}
export default BMTag;
无状态并不意味着没有逻辑,它意味着没有状态。所以你已经在那里了。
当然,您可以简化:
export default ({bookmarks, tag})=> (
<div className="bookmark_page" id={tag} >
<div className="bookmark_tag_title">
<p className="bookmark_tag_title_p">
{tag}
</p>
</div>
{
bookmarks.map(bm=> <BMFave bookmark={bm} key={bm.id} />)
}
</div>
)
当然。只需将映射函数移到函数之外即可。如果你愿意,你也可以把它留在里面,但这不是最佳实践,因为它会在每次渲染时重新创建(我认为)。
import React from 'react';
import BMFave from './BMFave.jsx';
const constructBookmarks = (bookmarks) => {
return bookmarks.map((bookmark) =>
<BMFave bookmark={bookmark} key={bookmark.id} />
);
};
export default (props) => {
return (
<div className="bookmark_page" id={props.tag} >
<div className="bookmark_tag_title">
<p className="bookmark_tag_title_p">
{props.tag}
</p>
</div>
{constructBookmarks(props.bookmarks)}
</div>
);
};
只要你的组件没有状态,也不使用 React 生命周期方法或 refs,它就可以是一个无状态的组件。
const BMTag = props => {
const bookmarks = props.bookmarks.map((bookmark) =>
<BMFave bookmark={bookmark} key={bookmark.id} />);
return (
<div className="bookmark_page" id="{props.tag}" >
<div className="bookmark_tag_title">
<p className="bookmark_tag_title_p">
{props.tag}
</p>
</div>
{bookmarks}
</div>
)
}
export default BMTag;
有关更多信息,您可以查看 Dan Abramov 撰写的这篇关于表示和容器组件的文章。