여기서
map
메소드가 굉장히 용이하게 사용되었다.<div className="main__right__story--content"> {this.state.storyInfo.map((el) => <div> <Story nickName={el.nickName} imgSrc={el.imgSrc} time={el.time} /> </div> ))} </div>
// 댓글 컴포넌틑
export class Comment extends Component {
constructor() {
super();
this.state = {
likeStatus: true, // 먼저 클래스명으로 사용될 state값에 Boolean 값을 부여한다.
};
}
// 클래스명을 바꾸는 함수
likeChange = (e) => {
const { className } = e.target.parentElement;// 비구조화 할당(깨알..)
this.setState({
likeStatus: !this.state.likeStatus, // Boolean 타입은 이렇게 부정 표현을 활용하여 쉽게 반대값으로 변환 시킬 수 있다.
});
};
render() {
return (
<div className="Comment">
<div
className={this.state.likeStatus ? "likeUnvalid" : "likeValid"}
// 삼항연산자 + Boolean 조합
// 해당 값이 T/F 일때 값(클래스명)을 지정
// state 값에 직접 클래스 이름을 넣어 지정하는 것보다 이와 같이 Boolean 값을 활용하여 관리하는 게 권장되는 방법
onClick={this.likeChange}>
<img className="likeEmpty" src="https://s3.ap-northeast-" />
<img className="likeRed" src="./Images/byungjinson/heart.png" />
</div>
<span onClick={this.props.commentRemove}>삭제</span>
</div>
);
}
}
componentDidMount(fetch)
이용하여 백엔드에서 데이터(json) 받아오고,map
으로 데이터의 속성을 파악해서 UI에 보여주는 방식이다.// 데이터 불러오기
componentDidMount() {
fetch("http://localhost:3000/Data/byungjinson/feedsData.json", {
method: "GET", // 겟방식
})
.then((res) => res.json())
.then((res) => {
this.setState({
commentList: res.commentData,
iconSrc: res.iconData,
// json 데이터의 key값을 확인하여 state값으로 넣어주고 있다
});
});
}
// 데이터 활용(댓글)
<div className="main__feeds__article__bottom--comment">
<ul>
{this.state.commentList.map((comment) => (
// map 활용하여 state 값에 들어있는 데이터를 부여하고 있다.
<li key={comment.id}>
{comment.content}
// 두 부분 모두 id, content라는 속성값을 활용하여 데이터를 받아오고 있다.
// 특히 li 태그의 key 속성을 각 데이터의 독립된 특성을 부여하기 위해 사용된다.
<Comment commentRemove={() => this.handleRemove(comment)} />
</li>
))}
</ul>
</div>
map
메소드는 각종 이미지 삽입에도 심심찮게 활용된다.// 네비게이션바 아이콘
<div className="navigation__icon">
{this.state.navImgSrc.map((el) => {
return <img className="nav__icon" src={el} />;
})}
</div>
// 메인피드 아이콘
<div className="main__feeds__article__bottom--icon">
{this.state.iconSrc.map((el) => {
return <img alt="iconImage" src={el.src} key={el.id} />;
})}
</div>
자바스크립트의 라이프 사이클 순서
:constructor
->render
->componentDidMount
->render
// 사용 전
<button className={
this.state.email.includes("@") && this.state.password.length > 4
? "loginValid"
: "loginUnvalid"
}>
로그인
</button>
// 사용 후
const { email, password } = this.state;
const isValid = email.includes("@") && password.length > 4;
<button className={isValid ? "loginValid" : "loginUnvalid"
}>
로그인
</button>
// 댓글 삭제 기능
handleRemove = (e) => {
this.setState({
commentList: this.state.commentList.filter((el) => {
return el.id !== e.id;
// 해당 조건에 맞는 요소만을 골라내어 새로운 배열을 리턴 한다
}),
});
};
비동기처리? 라이프사이클? stack/queue?
대충 실행 순서는 알겠지만 각각의 개념들이 연결되어서 이해되지 않아 좀더 심화된 학습이 필요한 것 같다
flex
.example{
display:flex
justify-content:center
align-items:center
}
/*이게 내가 아는 flex의 모든 것이다..
이 설정 값이 제일 많이 쓰인다고 해도 좀더 깊이있는 이해로 여러가지 방법으로 활용하고 싶다*/
hooks
redux
등등..내가 PM 이라면..?
- git init
- git remote add github_url
- git add.
git commit -m "commit_message"- git push origin master
내가 팀원이라면..?
- git clone github_url
- git branch branch_name
- git checkout branch_name
(작업)- git add .
git commit -m "commit_message"- git push origin branch_name
- PR(Pull Request) 요청
중간 작업
- git checkout master
- git pull origin master
- git checkout branch_name
- git merge origin master
(충돌 해결)- git add .
git commit -m "commit_message"- git push origin branch_name
- PR(Pull Request) 요청
conflict 발생
github 에서 확인하거나
Pull -> merge 했을 때 발생하여 확인할 수 있다
충돌난 부분을 고쳐주고 다시 push 하면 된다
public 폴더
특히 img / data 폴더는 각자 다를 수 있다
reset.css / common.css
이 또한 설정을 통일시켜줘야함을 잊지 말자
음 한가지 오해가 있었다면 굉장히 개인주의가 굉장히 강한 작업일 것이라 여기고 있었다는 점.
공부하는 과정 조차도 혼자가 절대 아닌 여러 사람과 도움을 주고받으며 가고 있었다.
노가다 인 것 같다.
흔히 어마어마 힘든 일을 칭하는 단어로 쓰이지만
그것 보다도 건설 현장에서 일하시는 인부, 인력 분들과 비슷하다고 생각한다.
하나의 거대한 건물을 짓기 위해 여럿이 뭉쳐서 어떤 자재를 어느 위치에 두어야 하는지 상의하고 만들어가는 사람들이라고 생각한다.
우왕 잘 보고 갑니당