리스트페이지가 있다고 할때 리스트의 하나를 그려주는 자식요소 component
그리고 그 자식요소를 반복적으로 뿌려줄 list component로 구성했다.
// comment.js
import React, { Component } from "react";
import "./Comment.scss";
class Comment extends Component {
constructor() {
super();
}
render() {
return(
<p className="commentText">
<b>{this.props.name}</b>
<span>{this.props.text}</span>
</p>
)
}
}
export default Comment;
// commentList.js
import React, { Component } from "react";
import "./CommentList.scss";
import Comment from "../Comment/Comment";
class CommentList extends Component {
constructor() {
super();
}
render() {
return(
<div className="comment-view-div">
{
this.props.comment.map((item, inx) => {
return (
<Comment key={inx} name={item.user_id} text={item.user_comment} />
)
})
}
</div>
)
}
}
export default CommentList;
comment.js에서는 가장 기본단위로 한개의 댓글을 그려준다.
comementList.js에서는 댓글 data(json)을 가져와 comment.js형식으로 반복적으로 그려준다.
그 그려주는 것이 바로 map. array의 내장메서드를 이용하는 것이다.
왜 map을 사용해야되는지는
map에 관한 자세한 사용법은 공식문서로..
// .js
this.state = {
memCheck: true
}
render() {
return (
<div className="LoginPage">
<div className="LoginPage-wrap">
<div className="loginLogo">
<h2>Log In</h2>
</div>
<ul>
<li
onClick={this.liFunc.bind(this)}
className={this.state.memCheck ? "trueli" : "falseli"}
>
<span>회원로그인</span>
</li>
// .scss
.trueli {
border: 1px solid #999;
border-bottom-color: #fff;
background-color: #fff;
transition: ease-in-out 0.3s;
pointer-events: none;
}
.falseli {
border: 1px solid #e5e5e5;
border-bottom: 1px solid #e5e5e5;
border-bottom-color: #999;
background-color: #f6f6f6;
color: #727272;
transition: ease-in-out 0.3s;
}
state의 값을 boolean으로 하여 스위치처럼 사용할 수 있다.
그러면 그 것을 활용하여 className의 삼항연산자를 적용하여 간단하게 스타일을 변경할 수 있다.
필요한 경우 하나의 state값을 활용하여 여러개의 스위치를 껏다 킬수도 있다.