npx create-react-app 프로젝트명
cd 프로젝트명
npm start
JSX는 자바스크립트를 이용해서 웹 콘텐츠를 보다 명시적이고 직관적으로 표현하는 방법
태그는 반드시 닫혀야 한다. 단일 경우에도 반드시 닫아줘야 함
1-1. 닫는 태그 써줘요 !
1-1. 한번에 쓰고 싶다면? 어쨌든 닫기 !
2개 이상의 태그는 반드시 하나의 태그로 감싸져 있어야 함
jsx내부에 자바스크립트 변수를 표현하는 경우, {}중괄호로 감싸야 함
style속성 정의는 css표기법이 아닌, 객체 리터럴 표기법을 써야함
4-1. 인라인으로 쓰는방법
4-2. 객체리터럴 방식으로 쓰는 방법
주석 입력시 중괄호로 감싸야 함
class 속성은 className으로 대체해야 함(html과 js의 각각 class를 구분하기 위함)
export(내보내기) : 나를 가져다 쓰세요 !
import(가져오기) : 내가 가져다 쓰겠다 !
화면에 뿌려지면?
부가적인 속성을 정의하고 활용하는 방식을 사용
같은 컴포넌트라 할지라도, 마크업 위치나 상황에 따라 세부 요소를 달리 표현하고 싶을때
App컴포넌트(부모)-Food컴포넌트(자식)
속성값을 넘겨주고 싶다 !
스타일 속성값도 넘겨주고 싶다 !
데이터 뿐만 아니라 함수도 전달할 수 있음(이벤트 핸들링)
const [상태명, 상태변경함수] = useState(초깃값) //useState()함수 호출
- 버튼을 누르면 count 상태 값이 +1 씩 증가하고, - 버튼을 누르면 count 상태 값이 -1 씩 감소하는 프로그램 만들기
import { useState } from "react";
import "./App05.css";
function App() {
const [count, setCount] = useState(0);
return (
<>
<h1 className="heading">{count}</h1>
<div className="div">
<button
className="btn"
onClick={() => {
setCount(count - 1);
}}
>
-
</button>
<button
className="btn"
onClick={() => {
setCount(count + 1);
}}
>
+
</button>
</div>
</>
);
}
export default App;
+버튼은 count 값이 5가 되면 더이상 증가하지 않고, -버튼은 count 값이 -5가 되면 더이상 감소하지 않게 만들기 !
import { useState } from "react";
import "./App05.css";
function App() {
const [count, setCount] = useState(0);
return (
<>
<h1 className="heading">{count}</h1>
<div className="div">
<button
className="btn"
onClick={() => {
if (count > -5) {
setCount(count - 1);
}
}}
>
-
</button>
<button
className="btn"
onClick={() => {
if (count < 5) {
setCount(count + 1);
}
}}
>
+
</button>
</div>
</>
);
}
const [lottoNumbers, setLottoNumbers] = useState([]);
//변수 lottoNumbers의 값을 빈배열로 놓고
const lottoNumbers = [];
// 반복문 lottoNumber의 배열의 길이가 6개가 될때까지 반복해라
while (lottoNumbers.length < 6) {
// 임시변수 temp안에 45개를 랜덤으로 뽑을거야 하지만 여기에는 0도 포함되어 있기때문에 +1을 해줄것이다.
// 그리고 소수점은 버려
// 결국 최소값은 1이고, 최댓값은 45다.
let temp = Math.floor(Math.random() * 45) + 1;
//중복값을 없애기 위한 조건문
//lottoNumbers 임시변수 temp로 뽑아둔 숫자가 있는지 확인
// 숫자가 찾아지지 않는다? 배열에 포함되지 않는 요소를 indexOf로 조회하면? 무조건 -1이 조회됨
// 그것을 이용해서 -1일때만 임시변수 temp배열에 push해라
if (lottoNumbers.indexOf(temp) === -1) {
lottoNumbers.push(temp);
}
}
//배열로 뽑힌 6개 숫자를 setLottoNumbers에 상태값으로 전달
setLottoNumbers(lottoNumbers);
<div className="numbers">
{lottoNumbers.map((num, idx) => {
return (
<div className="eachnum" key={idx}>
{num} </div>
);
})}
</div>
map은 각 숫자를 화면에 표시하기 위해 배열의 각 요소를 순회하면서 JSX 요소를 만드는데 사용됨
setLottoNumbers([]);
import React from "react";
import { useState } from "react";
import "./App06.css";
const App06 = () => {
const [lottoNumbers, setLottoNumbers] = useState([]);
const today = new Date();
const year = today.getFullYear();
const month = today.getMonth() + 1;
const date = today.getDate();
const now = `${year}년 ${month}월 ${date}일`;
const handleRandom = () => {
const lottoNumbers = [];
while (lottoNumbers.length < 6) {
let temp = Math.floor(Math.random() * 45) + 1;
if (lottoNumbers.indexOf(temp) === -1) {
lottoNumbers.push(temp);
}
setLottoNumbers(lottoNumbers);
};
const handleDefault = () => {
setLottoNumbers([]);
};
return (
<>
<div className="container">
<div className="lotto">
<h3>
<span>{now}</span>로또 번호 추첨
</h3>
<div className="numbers">
{lottoNumbers.map((num, idx) => {
return (
<div className="eachnum" key={idx}>
{num}
</div>
);
})}
</div>
<button onClick={handleRandom}>번호뽑기!</button>
<button onClick={handleDefault}>초기화!</button>
</div>
</div>
</>
);
};
export default App06;