벌써 수업 2주차다!
이번주는 수업을 많이 듣지 못했다.
너무 더워~~ㅠㅠ 밖에 못나가겠다.
학교 컴이 빠르고 좋아서 학교에서 하고 있는데
학교 안 코로나 확진자가 점점 늘어나고 난리다.
나도 검사받고 왔는데 다행히 음성나왔다.. 휴
다시 열심히 듣자! 읏짜! 😁
SCSS는 CSS를 편하게 쓰도록 도와주는 친구!
Nesting - 축약형으로 묶을 수 있다.
상위 요소 이어쓰기 &
ex2.) &"로! 클래스명 등, 글자도 이어쓸 수 있어요.
&:hover { background-color: blue }
문자열 치환
$defaultSize: 20px;
🎈사용할때는 #{$변수이름};
yarn add styled-components
컴포넌트의 생명주기!
라이프 사이클 함수는 클래스형 컴포넌트에서만 사용할 수 있다.
🐥react 공식문서
1. state가 변했을때
2. props가 변했을 때
3. 부모 컴포넌트가 변했을 때
4. forceUpdate()를 통해 강제로 컴포넌트 업데이트
- constructor() _생성자 함수
- render() _컴포넌트 모양 정의, 데이터 수정x
- componentDidMount() _마운트(컴포넌트 화면 나타나기) 완료
- componentDidUpdate(prevProps, prevState)_리린더링 완료후 실행 함수
- componentWillUnmount()_컴포넌트가 dom에서 제거 될 때 실행 함수
// React.createRef()
this.text = React.createRef();
createRef()는 우리가 가지고 오고 싶은 거를
current라는 변수명 안에 넣어줌.
✍ 주의 할 점!
state 관리는 컴포넌트 만드는 순서가 중요하다!
<클래스형>
(1) App.js를 class형 컴포넌트로 바꾸고 시작!
(2) state에 count라는 변수를 추가하고, count 숫자만큼 네모칸을 화면에 띄우기
(3) 더하기, 빼기 버튼을 만들고,
(4) 함수를 만들어서
(5) 연결하자!
<함수형>
(1) Nemo 컴포넌트 만들기
(2) App에서 불러오기
(3) useState()로 count를 state로 등록하자
(4) 뷰를 만들고(=반환할 리액트 요소를 만들고),
(5) 함수를 만들어서,
(6) 연결하자!
import React from 'react';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 3,
};
}
//state 고쳐주는 함수
addNemo = () => {
this.setState({count:this.state.count +1});
console.log('add nemo');
}
removeNemo = () => {
if(this.state.count > 0) {
this.setState({ count: this.state.count -1 });
}else{
window.alert('네모가 없어요!');
}
this.setState({count:this.state.count -1});
console.log('remove nemo');
}
componentDidMount() {
}
//뷰 담당
render() {
const nemo_count = Array.from({ length: this.state.count }, (v, i) => (i));
console.log(nemo_count);
return (
<div className="App">
{nemo_count.map((num, idx) => {
return (
<div
key={idx}
style={{
width: '150px',
height: '150px',
backgroundColor: '#eee',
margin: '10px'
}}>
nemo
</div>
)
})}
<button onClick={this.addNemo}>하나 추가</button>
<button onClick={this.removeNemo}>하나 빼기</button>
</div>
);
}
}
export default App;
import React from 'react';
const Nemo = (props) => {
const [count, setCount] = React.useState(3);
console.log('in nemo');
console.log(count);
const addNemo = () => {
setCount(count+1);
}
const removeNemo = () => {
//삼항 연산자
setCount(count > 0? count-1 : 0);
}
const nemo_count = Array.from({length: count}, (v, i) => (i));
return (
<div className="App">
{nemo_count.map((num, idx) => {
return (
<div
key={idx}
style={{
width: '150px',
height: '150px',
backgroundColor: '#eee',
margin: '10px'
}}>
nemo
</div>
)
})}
<button onClick={addNemo}>하나 추가</button>
<button onClick={removeNemo}>하나 빼기</button>
</div>);
}
export default Nemo;
이벤트 리스너는 사용자가 어떤 행동(=이벤트)을 하는 지 아닌 지 지켜보다가 알려주는 것!
대표적으로는 마우스 클릭, 터치, 마우스 오버, 키보드 누름 등이 자주 쓰인다.
tinder-card 쓰면 완전 간단하게 만들어지는데
이벤트 리스너로 직접 swipe 만드는게 입문자가 하기엔
난이도가 있어보였다..어렵다 어려워;;
선생님께서 코드짜는거 감탄만 하다가
결국 숙제 제출에 SwipeItem.js는 복붙해서 넣었다
나중에 이벤트 리스너 좀 더 공부하고 다시볼게요,,
2주차 끝~
💻유용한 사이트
✨알고가기
- alt+shift+f : 코드 예쁘게 정리
- 소괄호()는 즉시 실행을 의미한다.
- JS파일과 컴포넌트 이름,생성자 함수는 파스칼 케이스를 사용(ThisIsPascal)
- 폴더이름, 변수, 함수명는 카멜케이스(thisIsCamel)
- 스네이크 표기(this_is_snake)
- const는 상수: 한번 선언한 값은 바꿀 수 없다, block단위