npm init -y : package.json이 생성됨
React Framework이다.
charAt을 사용한다.
"Text".charAt(0);
=> T
"text".charAt(0) === "text".charAt(0).toUpperCase();
=> false
text.charAt(0) === text.charAt(0).toUpperCase();
=> true
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>섞어쓰기-1단계</title>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
const rootElement = document.querySelector("#root"); /* querySelector가 유연하게 #, . , "" 받을 수 있다 */
// 함수를 사용자 정의태그로 사용하려면 반드시 대문자로 선언할 것
// 함수로 태그를 만든다
// 파라미터를 통해 주소번지를 넘길 수 있다
// but, 상위태그에서 하위태그로만 가능하다
const Message = ( { text } ) => { //파라미터의 text는 props이다
// JS 영역
if (text.charAt(0) === text.charAt(0).toUpperCase()) {
return <h1>{text}</h1> // 여기는 JSX
} else {
return <h3>{text}</h3>
}
}
const element = (
<>
<Message text="Text" />
<Message text="text" />
</>
)
ReactDOM.createRoot(rootElement).render(element);
</script>
</body>
</html>
삼항연산자 사용
반복문은 사용하지 못 함
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
const rootElement = document.querySelector("#root"); /* querySelector가 유연하게 #, . , "" 받을 수 있다 */
// 함수를 사용자 정의태그로 사용하려면 반드시 대문자로 선언할 것
// 함수로 태그를 만든다
// 파라미터를 통해 주소번지를 넘길 수 있다
// but, 상위태그에서 하위태그로만 가능하다
const Count = ({num, selected}) => {
return selected ? <h1>{num}</h1> : <h3>{num}</h3>
}
const element = ( /* 그룹으로 묶어줄 때는 () 사용 */
<>
<Count num={1}/>
<Count num={2}/>
<Count num={3} selected={true} />
<Count num={4}/>
<Count num={5}/>
</>
)
ReactDOM.createRoot(rootElement).render(element);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
const rootElement = document.querySelector("#root"); /* querySelector가 유연하게 #, . , "" 받을 수 있다 */
// 함수를 사용자 정의태그로 사용하려면 반드시 대문자로 선언할 것
// 함수로 태그를 만든다
// 파라미터를 통해 주소번지를 넘길 수 있다
// but, 상위태그에서 하위태그로만 가능하다
const Count = ({num, selected}) => {
return selected ? <h1>{num}</h1> : <h3>{num}</h3>
}
const element = ( /* 그룹으로 묶어줄 때는 () 사용 */
<>
{/*for문 보다는 map을 더 활용*/}
{
[1,2,3,4,5].map(num => (
<Count num={num} selected={num === 3} />
))
}
</>
)
console.log(element);
ReactDOM.createRoot(rootElement).render(element);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
const rootElement = document.querySelector("#root");
const App = () => {
console.log('11'); // mount 되고 있다
const [items, setItems] = React.useState([]); // 위 아래를 통해 mount되고 있음을 알 수 있다
console.log('22'); // mount 되고 있다
console.log(items);
return (
<>
<h1>🍌</h1>
</>
)
}
ReactDOM.createRoot(rootElement).render(<App />);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
const rootElement = document.querySelector("#root");
const App = () => {
console.log('11'); // mount 되고 있다
const [items, setItems] = React.useState([
{ id: 1, title: "자바의정석", publish: "에이콘", count: 0 }, /* id가 key */
{ id: 2, title: "리액트정석", publish: "한빛미디어", count: 0 },
{ id: 3, title: "오라클정석", publish: "길벗", count: 0 },
]);
console.log('22'); // mount 되고 있다
console.log(items);
console.dir(items); /* 트리구조를 보고 싶을 땐 dir */
return (
<>
<ul>
{/* map을 사용하여 리스트 출력하기 */}
{
items &&
Object.keys(items).map((key) => (
<li key={key}>{`제목 : ${items[key].title}, 출판사 : ${items[key].publish}, 추천수 : ${items[key].count}`}</li>
))
}
</ul>
</>
)
}
ReactDOM.createRoot(rootElement).render(<App />);
</script>
</body>
</html>
아래와 같이 구조 변경해보기
<Paint>
<Nice />
</Paint>
<BookList>
{ Object.keys(items).map(()=> (
<BookItem>{}</BookItem>
))
</BookList>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div class="root"></div>
<script type="text/babel">
const rootElement = document.querySelector(".root");
const BookList = () => {
const [items, setItems] = React.useState([
{ id: 1, title: "자바의정석", publish: "에이콘", count: 0 },
{ id: 2, title: "리액트정석", publish: "한빛미디어", count: 0 },
{ id: 3, title: "오라클정석", publish: "길벗", count: 0 },
]);
const [items2, setItems2] = React.useState([{
0: { id: 1, title: "자바의정석", publish: "에이콘", count: 0 },
1: { id: 2, title: "리액트정석", publish: "한빛미디어", count: 0 },
2: { id: 3, title: "오라클정석", publish: "길벗", count: 0 },
}]);
return (
<>
<ul>
{/* map을 사용하여 리스트 출력하기 */}
{
items &&
items.map((item) => (
<BookItem key={item.id} item={item}/>
))
}
</ul>
</>
)
}///end of BookList
//props안에는 Object(1건 - {})가 있다
const BookItem = (props) => {
const item = props.item;
return (
<li>{`제목 : ${item.title}, 출판사 : ${item.publish}, 추천수 : ${item.count}`}</li>
)
}
ReactDOM.createRoot(rootElement).render(<BookList />);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
const rootElement = document.querySelector("#root");
const App = () => {
const [책제목, 책제목설정] = React.useState("자바의 정석");
const [좋아요, 좋아요설정] = React.useState(0);
const [싫어요, 싫어요설정] = React.useState(0);
const increase = () => {
좋아요설정(좋아요 + 1);
}
const decrease = () => {
싫어요설정(싫어요 + 1);
}
return (
<>
<h3>{책제목}</h3>
<span onClick={increase}>👍</span>{좋아요}
<span onClick={decrease}>👎</span>{싫어요}
</>
)
}
ReactDOM.createRoot(rootElement).render(<App />);
</script>
</body>
</html>