Formatting / Linting / Typescript
npx create-react-app 230105
//명령어 + 만들 폴더 이름
-----
npm install --save-dev prettier
//개발용으로만 사용하는 모듈 설치-배포하고 운영 X => devDependencies: "prettier" 추가
<=> npm i -D prettier
json
.prettierrc
{
"semi": true, //세미콜론 추가
"singleQuote": true //단따옴표
}
{
"[javascript]": {
"editor.maxTokenizationLineLength": 2500,
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
(사장님 같은 존재 - 자잘한 잘못을 수정할 수 있다. 문법적 오류 점검)
npm i -D eslint
--
npm i -D eslint-config-airbnb-base eslint-plugin-import
module.exports = {
extends: ['airbnb-base'],
rules: {
'linebreak-style': 0,
'no-console': 'off',
},
};
npm i -D typescript
---
//@ts-check
주석을 추가하면 간단하게 타입스크립트적 체크 가능
실제 타입스크립트는 .ts파일로 다른 방법으로 사용해야 한다. 추후 배울 에정
import {useState} from "react";
const [스테이트이름, 스테이트변경함수명] = useState(초기값);
const [state, setState] = useState(iniitialState);
useState 동작 원리
function App() {
let [teacher, setTeacher] = useState('소미주');
function customSetTeacher(name) {
setTeacher(name);
console.log(teacher);
}
return (
<div className="App">
<button onClick={() => customSetTeacher('SMJ')}>영어로!</button>
/////이렇게 쓰면 문제 없음<button onClick={customSetTeacher}>영어로!</button>
//위에 function을 이렇게 선언한다면,
// function customSetTeacher() {
//setTeacher("SMJ");
//console.log(teacher);
//}
<br />
<span>{teacher}</span>
</div>
);
}
//단순한 조건문은 if 말고 삼항연산자
//return 안에서 if문 쓰는 것을 리액트가 막는다.
{value > 10 ? '😎' : '👍'}
//구조분해 할당***
//state는 배열이 시작하는 **메모리 주소값**을 가지고 있다.
//아무리 배열 값을 변경하려고 해도 변경되지 않는다.
//메모리 주소는 항상 동일 => 바뀐게 없으니 렌더링이 되지 않는다.
자바스크립트 자료형
→ 원시 타입 vs 객체 타입 ⇒ Object, Array
export default function ArrayState() {
const [state, setState] = useState([0]);
console.log(state);
return (
<div>
{state[0]}
<br />
<button
onClick={() => {
state[0] = 1;
const copyArr = [...state];
setState(copyArr);
console.log(state);
}}
>
+1
</button>
</div>
);
}
const array = [1, 2, 3, 4, 5];
console.log(array); //[ 1, 2, 3, 4, 5 ]
console.log(...array);//1 2 3 4 5
const copyArr = array; //메모리 주소가 copy
console.log(copyArr); //[ 1, 2, 3, 4, 5 ]
console.log(array === copyArr); //메모리 주소가 같기 때문에 true
---
const copyArr = [...array]; //주소를 가져오는 것이 아니라 값을 가져오는 새로운 배열
console.log(copyArr);//[ 1, 2, 3, 4, 5 ] 값은 동일
console.log(array === copyArr); //false!!!
---------------------
const obj = {
pororo: '뽀로로',
lupy: '루피',
crong: '크롱',
};
const copyObj = obj;
console.log(obj);//{ pororo: '뽀로로', lupy: '루피', crong: '크롱' }
console.log(copyObj); //{ pororo: '뽀로로', lupy: '루피', crong: '크롱' }
console.log(obj === copyObj); //true
---
const copyObj = { ...obj };
console.log(obj);//{ pororo: '뽀로로', lupy: '루피', crong: '크롱' }
console.log(copyObj);//{ pororo: '뽀로로', lupy: '루피', crong: '크롱' }
console.log(obj === copyObj); //false 값은 같지만 실제 메모리주소는 다르기 때문에 false
---
const copyObj = { ...obj, lupy: 'lupy' };
**//값을 하나만 변경하고 싶을 때**
//{ pororo: '뽀로로', lupy: 'lupy', crong: '크롱' }
---
//전개연산자 - 나머지 연산자로도 많이 사용
//내가 원하는 값만 , 나머지는 그대로 두고 싶을 때
function foo(a,b, ...rest) {
}