//컴포넌트 생성
const Hello = (props) => {
return <div>Hello, {props.name}</div>;
}
//컴포넌트 사용
const App = () => {
return <div>
<Hello name="하나" />
<Hello name="두리" />
</div>;
}
props의 값을 변경해서 사용하고 싶다면 새로운 변수를 생성한 다음
그 변수를 사용한다.
html에서 checked 또는 value는 해당 값이 '초기값'
리액트 내에서는 '현재값' ( defaultChecked가 '초기값')
State는 컴포넌트 내에서 유동적으로 변할 수 있는 값을 저장한다.
import {useState} from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>버튼을 {count}번 눌렀습니다.</p>
<button onClick={() => setCount(count+1)}>클릭</button>
</div>
);
}
import {useState} from 'react';
를 React패키지로부터 import해와야 한다. const App = () => {
const [value, setValue] = useState(초기값);
return ...
}
state값을 직접 변경하게 되면 react가 컴포넌틑 다시 렌더링할 타이밍을 눈치채지 못한다.
setState()
함수를 이용해 값을 변경한다. const [count, setCount] = useState(0);
setCount(count + 1);
함수를 넣으면 return값으로 state가 변경된다.
현재 값을 기반으로 State값을 변경하고 싶을 때는 함수를 넣는 방법을 사용하자
const [count, setCount] = useState(0);
setCount((current) => {
return current +1;
});
const [user, setUser]= useState({name:'고메리', age:1});
setUser((current) => {
current.age = 2; // 객체로 선언된 내부가 변경됨
return current;
})
// 이러면 리액트가 재렌더링을 못한다 ㅠㅠ
//이렇게 해야합니다!!!
const [user, setUser]= useState({name:'고메리', age:1});
setUser((current) => {
const newUser = { ...current} //객체를 복사해 와서
newUser.age = 2; // 새 객체의 value바꿔주고,
return newUser; // 새로운 객체를 return해야 리액트가 알아차림
})
웹 브라우저가 알려주는 html요소에 대한 사건의 발생을 의미
const App = () => {
const handleClick= () => {
alert('클릭했슈');
}
return (
<div>
<button onClick={handleClick}> 클릭</button>
</div>
);
};
const App =() => {
return (
<div>
<button onClick={() => {alert('클릭했슈')}> 클릭</button>
</div>
);
};
onClick
: elem.클릭했을 때
onChange
: elem. 내용이 변경 시 (input의 텍스트를 변경, 파일선택 등)
onKeyDown/ onKeyUp, onKeyPress
: 키보드 입력 발생 시
onDoubleClick
: elem. 더블 클릭시
onFocus
: elem.에 포커스 되었을 때
onBlur
: elem.에 포커스 잃었을 때
onSubmit
: form elem.에서 submit했을 때
const App = () => {
const [inputValue, setInputValue] = useState('defaultValue');
const handleChange = (event) => {
setInputValue(event.target.value);
}
return (
<div>
<input onChange={handleChange} defaultValue={inputValue} />
<br />
입렵한 값은 : {inputValue}
</div>
);
};
여기서 event.target
은 이벤트의 원인이 되는 elem.
object의 key를 동적으로 할당하는 방법
state를 여러 개 선언하는 대신 object를 활용하여 여러 개의 input을 하나의 state로 관리할 수 있다.
const App = () => {
const [user, setUser] = useState({name: '메리', age: 1});
const handelChange = (event) => {
const { name, value } = event.target;
const newUser = { ...user};
newUser[name] = value;
setUser(newUser);
};
return (
<div>
<input name="name" onChange={handleChange} value={user.name} />
<br />
<input name='age' onChange={handleChange} value={user.age} />
<p>{user.name}님은 {user.age}살 입니다.</p>
</div>
);
};