벌써 수업 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단위