import React from 'react';
import Hi from './Hi';
function App(){
const age = 18;
return(
<>
<Hi /> /*1. Component는 하나의 부모 요소로 감싸져야 함*/
/*2. js 표현식(변수)를 쓰려면 {}로 감싸주어야 함*/
/*5. HTML Element를 꼭 닫아주어야 함*/
<div className="age">{age}</div>
/*3. 인라인 스타일링은 camelCase로 작성*/
/*4. class대신 `className`*/
/*7. style={{속성: 값}}`*/
/*{/*주석형태*/}*/
<div style={{backgroundColor: 'pink'}}</div>
</>
import ReactDOM from "react-dom";
function Hello(props) {
return (
<main>
<h1>Hello {props.user} World!</h1>
<h3>{props.count}번째 방문입니다.</h3>
</main>
);
}
const rootElement = document.getElementById("root");
const root = ReactDOM.createRoot(rootElement);
root.render(<Hello user="소마고" count={3} />);
React 함수(컴포넌트)의 최상위에서만 Hook을 호출 할 것.
반복문, 조건문, 중첩된 함수등에서 호출 X
Custom Hook에서는 호출 가능
일반적인 Javascript 함수에서는 호출 X
그래야만 한눈에 보아도 Hook 규칙이 적용되는지를 파악할 수 있기 때문 (공홈)
한 컴포넌트에서 여러개의 hook이 사용되는 경우
hook은 위에서부터 아래로 순서에 맞게 동작한다.
const [state, setState] = useState(초기값);
컴포넌트의 현재 상태 갑은 state라는 변수에 들어있고 state를 변경하고 싶으면 setState함수를 이용해서 변경할 수 있다.
import React, { useState } from 'react';
function Plus() {
const [number, setNumber] = useState(0);
const onIncrease = () => {
setNumber(prevNumber => prevNumber + 1);
}
const onDecrease = () => {
setNumber(prevNumber => prevNumber - 1);
}
return (
<div>
<h1>{number}</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Counter;
import React from "react";
function App() {
return <div>Hi, siyeon</div>;
}
export default App;
import React from "react";
const App = () => {
return <div>Hi, siyeon</div>;
};
export default App;
arr.map((item) => {return <요소>{item}</요소>})
// 한줄 요소인 경우 return과 {} 동시에 생략가능
배열.filter(function(curretValue, index, arr), thisValue);
import React, { useState } from 'react';
function InputExample() {
// useState를 사용하여 input 값의 상태를 관리한다.
const [inputValue, setInputValue] = useState('');
// input 값이 변경될 때마다 상태를 업데이트하는 함수를 정의한다.
const handleInputChange = (event) => {
setInputValue(event.target.value);
};
return (
<div>
{/* input 요소를 렌더링하고 onChange 이벤트 핸들러를 연결한다. */}
<input
type="text"
value={inputValue}
onChange={handleInputChange}
/>
{/* 입력한 데이터를 출력합니다. */}
<p>입력한 값: {inputValue}</p>
</div>
);
}
export default InputExample;
let 변수 = <컴포넌트 />```
참 && 표현식 -> 표현식
, 거짓 && 표현식 -> 거짓
인라인 If-else
조건? <컴포넌트1/>:<컴포넌트2 /> //조건이 참이면 컴포넌트1이 렌더링, 거짓이면 컴포넌트 2가 렌더링
조건? <컴포넌트> : null //조건이 거짓이면 컴포넌트 렌더링 안됨
```jsx
import { useState } from "react";
import "./style.css";
export default function ConditionR() {
const [login, setLogin] = useState(false);
return (
<div>
<div className="wrapp">
{login && <span className="greeting">환영합니다~</span>}
{login ? (
<button className="btn" onClick={() => setLogin(false)}>
로그아웃
</button>
) : (
<button className="btn" onClick={() => setLogin(true)}>
로그인
</button>
)}
</div>
<hr />
<div style={{ paddingTop: "8px" }}>모두함께 리엑트 공부</div>
</div>
);
}