
컴포넌트를 선언하는 방식은 두가지가 있다
import React from 'react';
import './App.css';
class App extends Componet {
reder(){
const name = 'react';
return <div className="react">{name}</div>
}
}
export default App;
함수형이 더 좋음 ⇒ 선언도 쉽고, 기존 문제점을 Hooks 기능으로 해결
다른 파일에서 해당 파일을 불러올수(import) 있게 해줌
다른 파일을 가져옴
컴포넌트 속성을 설정할때 사용하는 요소 이다
props 값은 부모 컴포넌트에서 설정(조작)한다.
MyComponent.js
import React from 'react';
const MyComponet = props => {
return <div> 안녕하세요, 제이름은 {props.name} 입니다. </div>
};
exprot defalt MyComponent;
(자식)컴포넌트에서 props를 name으로 설정할려면
⇒ {props.name} 이라 하면된다.
props를 지정하는 방법에는 여러 방법이 있다
대부분 비구조 할당을 배우고, 이는 뒤에서 다룬다
지금은 비구조 할당 ㄴㄴ 임 걍 정석
App.js
import React from 'react';
import MyComponet from './MyComponent'
const App = () => {
return <MyComponet name = "React" />;
};
exprot defalt App;
그럼 (부모)컴포넌트에서 name = '값' 으로 props 값을 지정하면
(자식) 컴포넌트의 props.name 의 값이 결정된다
import React from 'react';
const MyComponet = props => {
return <div> 안녕하세요, 제이름은 {props.name} 입니다. </div>
};
MyComponet.defaultProps = {
name : '기본이름'
};
exprot defalt MyComponent
자식 컴포넌트 안에
컴포넌트이름.defaultProps = {porps의 프로퍼티 : '기본값'};
을 해주면
기본값이 설정이 된다.
(자식)컴포넌트에서 {props.children}을 하면
⇒ 부모 태그 사이의 내용을 보여준다
객체에서 값을 추출하는 문법
const ironMan = {
name: '토니 스타크',
actor: '로버트 다우니 주니어',
alias: '아이언맨'
};
const captainAmerica = {
name: '스티븐 로저스',
actor: '크리스 에반스',
alias: '캡틴 아메리카'
};
function print(hero) {
const text = `${hero.alias}(${hero.name}) 역할을 맡은 배우는 ${
hero.actor
} 입니다.`;
console.log(text);
}
print(ironMan);
print(captainAmerica);
위 예시에서 값에 접근할때 계속 hero.~~를 해야하는 귀찮음이 있다
const ironMan = {
name: '토니 스타크',
actor: '로버트 다우니 주니어',
alias: '아이언맨'
};
const captainAmerica = {
name: '스티븐 로저스',
actor: '크리스 에반스',
alias: '캡틴 아메리카'
};
// ------ 방법 1 ------ //
function print(hero) {
const { alias, name, actor } = hero;
const text = `${alias}(${name}) 역할을 맡은 배우는 ${actor} 입니다.`;
console.log(text);
}
// ------ 방법 2 ------ //
function print({ alias, name, actor }) {
const text = `${alias}(${name}) 역할을 맡은 배우는 ${actor} 입니다.`;
console.log(text);
}
print(ironMan);
print(captainAmerica);
이렇게 바꾸면 간단하다
즉
const { alias, name, actor } = hero;
이 부분이 객체의 값들을 추출해서 새로운 상수에 넣어준다.
비구조화 할당법을 사용하면 겁내 깔끔하게 사용할수 있다
MyComponent.js(비구조화 활당법)
import React from 'react';
const MyComponet = ({name}) => {
return <div> 안녕하세요, 제이름은 {name} 입니다. </div>
};
MyComponet.defaultProps = {
name : '기본이름'
};
exprot defalt MyComponent
컴포넌트의 필수 props를 지정하거나, 타입을 지정할때
import React from 'react';
import PropTypes from 'prop-types';
const MyComponet = ({name}) => {
return <div> 안녕하세요, 제이름은 {name} 입니다. </div>
};
MyComponet.defaultProps = {
name : '기본이름'
};
MyComponet.propsTypes = {
name : PropsTypes.strting
};
exprot defalt MyComponent
(부모) 컴포넌트에서 설정할수있는 props 값은 string이여야함
propTypes을 지정하지 않을때 경고하는 메세지
해당 props를 (부모) 컴포넌트에서 반드시 설정해야함
컴포넌트 내부에서 바뀔수 있는 값
즉, props는 부모 컴포넌트가가 설정하는 값이라, (자식) 컴포넌트는 props를 읽기전용으로만 써야하는데
(자식) 컴포넌트도 props를 변경할 수 있게 해준다.
종류
클래스형 컴포넌트에서 state를 설정할떈 constructor 메서드를 작성해서 설정한다
constructor(props) {
super(props);
this.state = {
number: 0
};
}
render() {
const { number } = this.state;
return (
<div>
<h1>{number}</h1>
<button
onClick={() => {
this.setState({ number: number + 1 });
}}
>+1</button>
</div>
)
}
즉, 클래스형 컴포넌트에는 1. constructor 설정(super,state초기값) 2. this.setsState로 동작 한다
constructor 메서드를 사용하지 않고 state초기값을 설정할수있다
import React, { Component } from 'react'
export class Counter extends Component {
state = {
number: 0
};
render() {
const { number } = this.state;
return (
<div>
<h1>{number}</h1>
<button
onClick={() => {
this.setState({ number: number + 1 });
}}
>+1</button>
</div>
)
}
}
export default Counter
this.setState는 상태가 비동기적으로 업데이트 된다 (바로바로 바뀌지 않음)
⇒ 객체 대신 함수를 넣으면 된다
this.setState((prevState, props) => {
return{
// 업데이트 내용
})
원래는 state를 사용할수 없었지만 Hooks를 이용해 가능하게 만듬
useState로 가능하다
사용방법을 논하기 전에 배열 비구조화 할당을 배워보자
객체 비구조화 할당이랑 비슷하다
즉, 배열 안에 들어있는 값을 쉽게 추출하는 방법이다
객체 구조화 할당법 처럼, 배열에도 사용가능한것이다 (위에 객체 비구조화 할당을 다시 보셈)
useState라는 함수를 이용해서,
import React, { useState } from 'react';
const Say = () => {
const [message, setMessage] = useState('');
const onClickEnter = () => setMessage('안녕하세요');
const onClickeave = () => setMessage('안녕히가세요');
return (
<div>
<button onClick={onClickEnter}> 입장 </button>
<button onClick={onClickeave}> 퇴장 </button>
<h1>{message}</h1>
</div>
)
}
export default Say;
state값을 바꾸는건 세터 함수여야함(두번째 배열)
그렇담 배열이나 객체를 업데이트 해야하는 경우는 어떻게 해야할까?
⇒ 배열이나 객체를 사본으로 저장한뒤 그 사본을 세터함수로 업데이트한다