
원하는 위치에 새 폴더 하나를 만든 뒤 shift+우클릭 누른다.

여기에 PowerShell 창 열기를 누르고 powershell을 켠다.


npx create-react-app 프로젝트명 입력 후 엔터를 누르고 y를 입력한 다음 위 사진 두개처럼 뜬다면 설치는 끝이다.

vsCode를 켜고 만들어놓은 폴더를 불러오기 한다. 불러오기 했을 때 프로젝트명이 제대로 잘 떠야 한다.
미리보기 띄우기는 Terminal -> New Terminal => 터미널에서 npm start 입력.


<div> 만드는 법React.createElement('div', null, 'Hello World')
JSX 사용해서 <div></div>로 쓸 수 있다.
className으로 적는다.import '파일경로';를 적는다.{중괄호}라고 적는다.style={{스타일명:'값'}}라고 적는다.return() 안에는 병렬로 태그 2개 이상 기입 금지.statelet [a, c] = [1, 2];/* eslint-disable */ -> Lint 끄는 기능.
onClick={}안에 함수 이름을 넣어야 한다.
등호로 변경 금지!
state변경함수(새로운 state)
/* 좋아요 버튼 */
let [like, likeChange] = useState(0);
/* 싫어요 버튼 */
let [unlike, unlikeChange] = useState(0);
return (
<div className="App">
<div className="black-nav">
<h4>ReactBlog</h4>
</div>
<div className="list">
<h4>
{title[0]}{" "}
/* 좋아요 버튼 */
<span
onClick={() => {
likeChange(like + 1);
}}
>
👍
</span>
{like}
/* 싫어요 버튼 */
<span
onClick={() => {
unlikeChange(unlike + 1);
}}
>
👎
</span>
{unlike}
</h4>
기존 state == 신규 state의 경우에는 변경을 안 해준다.
array/object 담은 변수에는 값이 어디 저장되어 있는지 알려주는 화살표만 저장된다. 그래서 let copy = title; 이 코드의 copy에는 title에 있던 화살표가 복사되기 때문에 내용이 바뀌지 않는다.
변수1 & 변수2의 화살표가 같으면 변수1 == 변수2를 비교해도 true가 나온다.
state가 array/object일 땐 copy를 만들어서 수정해야 한다.
<button
onClick={() => {
let copy = [...title];
copy[0] = "코딩 공부하는 중";
titleChange(copy);
}}
>
수정
</button>
array, object는 reference data type이기 때문이다.
[...title]은 괄호를 벗겨달라는 의미이다.
조건식 ? 참일 때 실행할 코드 : 거짓일 때 실행할 코드[array, array, array].map(function() {
return '123456789';
});
{title.map(function (a, i) {
// a => array 안에 있던 데이터
// i => 반복문 돌 때마다 0부터 1씩 증가하는 정수
return (
<div className="list">
<h4
onClick={() => {
setModal(true);
}}
>
{title[i]} <LikeUnlike />
</h4>
<p>2월 17일 발행</p>
</div>
);
})}
HTML/CSS input
<input>에 입력한 값 가져오는 방법
<input onChange = {(e) => { console.log(e.target.value) }} />
e.stopPropagation()
<span
onClick={(e) => {
e.stopPropagation();
likeChange(like + 1);
}}
>
👍
</span>
{like}
state 변경함수는 늦게 처리된다.
<input
onChange={(e) => {
입력값변경(e.target.value); // 1번. 이 코드가 처리되기 전에
console.log(입력값); // 2번. 이 코드가 먼저 실행된다.
}}
/>
let [text, textChange] = useState("");
<button
onClick={() => {
let copy = [...title];
copy.unshift(text);
titleChange(copy);
}}
>
댓글쓰기
</button>
shift() - 배열 맨 앞의 값 삭제unshift(값) - 배열 맨 앞의 값 추가 {title.map(function (a, i) {
// a => array 안에 있던 데이터
// i => 반복문 돌 때마다 0부터 1씩 증가하는 정수
return (
<div className="list" key={i}>
<h4
onClick={() => {
setModal(true);
setModalTitle(i);
}}
>
{title[i]} <LikeUnlike />
</h4>
<p>2월 17일 발행</p>
<button
onClick={() => {
let copy = [...title];
<LikeUnlike />;
copy.splice(i, 1); // 원하는 항목 삭제
titleChange(copy);
}}
>
삭제
</button>
</div>
);
})}