|
@@ -1,4 +1,18 @@
|
|
-// Good practice: name CSS classNamees like the associated component
|
|
|
|
|
|
+/*
|
|
|
|
+Good practices:
|
|
|
|
+- name CSS classNamees like the associated component
|
|
|
|
+- prefix non-React method names by an "_"
|
|
|
|
+- pass a "key" attribute to elements in a loop
|
|
|
|
+
|
|
|
|
+JSX:
|
|
|
|
+- "className", not "class"
|
|
|
|
+- knows how to render an array of JSX elements, not just one.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+const commentList = [
|
|
|
|
+ { id: 1, author: "Morgan McCircuit", body: "great picture!" },
|
|
|
|
+ { id: 2, author: "Bending Bender", body: "Excellent stuff" }
|
|
|
|
+];
|
|
|
|
|
|
class Comment extends React.Component {
|
|
class Comment extends React.Component {
|
|
render() {
|
|
render() {
|
|
@@ -19,16 +33,33 @@ class Comment extends React.Component {
|
|
}
|
|
}
|
|
|
|
|
|
class CommentBox extends React.Component {
|
|
class CommentBox extends React.Component {
|
|
|
|
+ _getComments() {
|
|
|
|
+ return commentList.map((comment) => {
|
|
|
|
+ return (<Comment
|
|
|
|
+ author={comment.author}
|
|
|
|
+ body={comment.body}
|
|
|
|
+ key={comment.id} />);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ _getCommentsTitle(commentCount) {
|
|
|
|
+ if (commentCount === 0) {
|
|
|
|
+ return "No comments yet";
|
|
|
|
+ } else if (commentCount === 1) {
|
|
|
|
+ return "1 comment";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return `${commentCount} comments`;
|
|
|
|
+ }
|
|
|
|
+
|
|
render() {
|
|
render() {
|
|
|
|
+ const comments = this._getComments();
|
|
return (
|
|
return (
|
|
<div className="comment-box">
|
|
<div className="comment-box">
|
|
<h3>Comments</h3>
|
|
<h3>Comments</h3>
|
|
- <h4 className="comment-count">2 comments</h4>
|
|
|
|
|
|
+ <h4 className="comment-count">{this._getCommentsTitle(comments.length)}</h4>
|
|
<div className="comment-list">
|
|
<div className="comment-list">
|
|
- <Comment
|
|
|
|
- author="Morgan McCircuit" body="Great picture!" />
|
|
|
|
- <Comment
|
|
|
|
- author="Bending Bender" body="Excellent stuff!" />
|
|
|
|
|
|
+ {comments}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|