const mode = useState("WELCOME");
// 1. useState의 인자는 useState의 초기값이다
const modeValue = mode[0];
// 2. state의 값은 0번째 인덱스의 값으로 읽고, "WELCOME"이라는 값이 표시된다.
const setMode = mode[1];
// 3. state의 내용을 변경할 땐 useState의 1번째 인덱스에 해당하는 값(함수)을 사용한다.
console.log(mode)
// 출력 시 아래 이미지처럼 표시된다.
const [mode, setMode] = useState("WELCOME")
// 보통 변수를 일일히 지정하지 않고 위와 같이 선언한다.
mode[1]
는 f ()
로 표시되어있다.setMode()
를 사용할 수 있는 것!const App = () => {
const [mode, setMode] = useState("WELCOME");
// 1. mode라는 상수와 setMode라는 상수에 초기값이 "WELCOME"인 state를 넣어놨다.
return (
<div>
<h1>{mode}</h1>
// 2. 기본적으로 h1의 내용은 {mode}, 즉 "WELCOME" 이지만,
<button onClick={() => setMode("HELLO WORLD")}>변경</button>
// 3. 버튼을 클릭할 경우 state의 1번째 요소인 setState(setMode)로 인해 값이 변경된다.
</div>
);
};
const root = ReactDOM.createRoot(document.getElementById('root'));
// 1. 리액트 사용시, 기본적으로 모든 컴포넌트는 이 'root'라는 div 안에 렌더링 된다.
const element = <Welcome name="Sara" />;
// 2. 이때 element라는 상수에, Welcome이라는 컴포넌트를 할당한다.
// 2-1. 해당 컴포넌트는 name이라는 이름으로 "Sara"라는 값을 props로 전달한다.
root.render(element);
// 3. root div는 element, 즉 Welcome 컴포넌트를 렌더링한다.
function Welcome(props) {
// 4. 이때 Welcome 컴포넌트는 이미 props로 특정 값을 받아온 상황이다.
return <h1>Hello, {props.name}</h1>;
// 5. 해당 컴포넌트는 name이라는 이름으로 받아온 props를 출력하는 컴포넌트다.
// 6. name이라는 이름으로 받아온 값은 "Sara"이기 때문에, 화면엔 "Hello, Sara"라는 문구가 출력된다.
}
function Welcome (props) {
props.name = props.name + "님";
// 1. props.name은 이미 props로 받아온 값이기 때문에 해당 값을 직접 수정할 수 없다.
return <h1>Hello, {props.name}</h1>;
function Welcome (props) {
const username = props.name + "님";
// 2. username이라는 새로운 변수에 부모로부터 받아온 props.name 값을 가공해서('님' 붙이기) 사용한다.
return <h1>Hello, {username}</h1>;
props는 부모가 자식한테 내려주기 때문에 너무 많은 depth로 컴포넌트를 구성하게되면 props driling이 발생한다.
props drilling이 발생하지 않도록 초장에 잘 설계해야한다!
출처: