const Welcome = (props) => {
// (X) Props 값 임의로 변경하지 말기!
props.name = props.name + "님";
return <h1>Hello, {props.name}</h1>;
// (O) 새로운 변수 생성해서 사용하기!
const username = props.name + "님";
return <h1>Hello, {username}</h1>;
}
data-
or aria-
로 시작하는 attribute는 예외 (data-type, aria-label 등)(<input type="checkbox" checked={false} />)
HTML -> 초기값으로 사용됨
React -> 현재값을 의미함
React에서 초기값의 의미로 사용하고 싶다면 defaultChecked, defaultValue를 사용
const Names = () => {
const names = [
{key: '1', value: '민수'},
{key: '2', value: '영희'},
{key: '3', value: '길동'},
]
return (
<div>
{names.map((item) => (
<li key={item.key}>{item.value}</li>
))}
</div>
)
}
import { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>버튼을 {count}번 눌렀습니다.</p>
// (X) 직접 변경 NO!
<button onClick={() => {count = count + 1;}>
// (O) 반드시 setState 함수를 이용해 값을 변경!
<button onClick={() => setCount(count + 1)}>
클릭
</button>
</div>
);
}
const [count, setCount] = useState(0);
setCount(count + 1);
const [count, setCount] = useState(0);
setCount((current) => {
return current + 1
})
const [user, setUser] = useState({name: "민수", grade: 1})
setUser((current) => {
current.grade = 2;
return current;
})
위와 같이 object를 갖는 state도 만들 수 있지만 객체 자체가 변경되지 않으면 React는 state의 변경을 감지하지 못한다.
따라서 기존 객체의 내용을 새로운 객체에 담아 변경해준 후 return 해줘야 한다.
const [user, setUser] = useState({name: '민수', grade: 1 })
setUser((current) => {
const newUser = { ...current }
newUser.grade = 2
return newUser
})