ex1)
props: 이름,성별
state: 나이 , 연애여부 등
ex2)
toggle switch의 state: on/off 여부
props의 특징
props를 사용하는 방법
하위컴포넌트에 전달하고자 하는 값과 속성의 정의한다.
-방법1
//react에서 속성및 값을 할당(전달하고자 하는 값을 중괄호{}로 감싸기)
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child text={"I'm the eldest child"} />
</div>
);
}
-방법2
: 여는 태그와 닫는 태그 사이에 value를 넣어 전달하는 방법=>props.children이용
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child>I'm the eldest child</Child>//열고 닫는 태그 사이에 넣기
</div>
);
};
props를 이용하여 정의된 값과 속성을 전달한다.
//<parent>컴포넌트에서 전달한 문자열을 <child>컴포넌트에서 받기.react컴포넌트에 props를 전달하면 필요한 모든 데이터를 가지고 온다.
function Child(props) {
return (
<div className="child"></div>
);
};
전달받은 props를 렌더링한다.
//props는 객체로, 이 객체의 {key:value}는 <parent>컴포넌트에서 정의한 {attribute: value}의 형태를 띤다.
function Child(props) {
return (
<div className="child">
<p>{props.text}</p> //"I'm the eldest child"
</div>
);
};
state를 다루는 방법
usestate
사용법react로 부터 usestate불러오기
import {useState} from “react”;
usestate호출하기(=“state”라는 변수를 선언)
function CheckboxExample() {
// 새로운 state 변수를 선언하고, 여기서는 이것을 isChecked 라 부르겠습니다.
//isChecked, setIsChecked 는 useState 의 리턴값을 구조 분해 할당한 변수입니다.
const [isChecked, setIsChecked] = useState(false);
// const [state 저장 변수, state 갱신 함수] = useState(state 초깃값);
}
//usestate를 호출하면 배열을 반환
//배열의 0번째 요소는 현재 state변수, 1번쨰요소는 이변수를 갱신할 수 있는 함수, usestate의 인자로 넘겨주는 값은 state의 초깃값
-Ischecked:state를 저장하는 변수
-setischecked: state ischecked를 변경하는 함수
-Usestate: state hook
-False: state 초깃값
이 state에 저장된 값을 사용하기위해 JSX앨리먼트 안에 직접 불러서 사용
여기서는 삼항연산자
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
state갱신하기
사용자가 체크박스 값을 변경하면 onChange
이벤트가 이벤트 핸들러 함수인 handleChecked
를 호출하고, 이 함수가 setIsChecked
를 호출하게 됩니다. setIsChecked
가 호출되면 호출된 결과에 따라 isChecked
변수가 갱신되며, React는 새로운 isChecked
변수를 CheckboxExample
컴포넌트에 넘겨 해당 컴포넌트를 다시 렌더링 합니다.
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
const handleChecked = (event) => {
setIsChecked(event.target.checked);
};
return (
<div className="App">
<input type="checkbox" checked={isChecked} onChange={handleChecked} />
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
</div>
);
}
자주 사용되는 이벤트 처리
onChange: <input>
<textarea>
<select>
와 같은 폼 엘리먼트는 사용자의 입력값을 제어하는 데 사용
-onChange 이벤트가 발생하면 e.target.value
를 통해 이벤트 객체에 담겨있는 input 값을 읽어올 수 있습니다.
-컴포넌트 return 문 안의 input 태그에 value 와 onChange 를 넣어준다.
-onChange 는 input 의 텍스트가 바뀔 때마다 발생하는 이벤트이다.
-이벤트가 발생하면 handleChange 함수가 작동하며, 이벤트 객체에 담긴 input 값을 setState 를 통해 새로운 state 로 갱신한다.
function NameForm() {
const [name, setName] = useState("");
const handleChange = (e) => {
setName(e.target.value);
}
return (
<div>
<input type="text" value={name} onChange={handleChange}></input>
<h1>{name}</h1>
</div>
)
};
onClick: 사용자가 클릭이라는 행동을 하였을 때 발생하는 이벤트
-버튼이나 <a>
tag 를 통한 링크 이동 등과 같이 주로 사용자의 행동에 따라 애플리케이션이 반응해야 할 때 자주 사용하는 이벤트
//버튼 클릭시 input tag에 입력한 이름이 alert을 통해 알림창이 팝업 되도록함
//함수 정의하기
<button onClick={() => alert(name)}>Button</button>
(input밑에 추가)
//함수자체를 전달하기
const handleClick = () => {
alert(name);
};
…
<button onClick={handleClick}>Button</button>
…
예제
<select>
: 사용자가 drop down 목록을 열어 그중 한 가지 옵션을 선택하면, 선택된 옵션이 state 변수에 갱신