🤔 만약, 동적인 배열을 랜더링 해야한다면? → map() 을 사용!! map()함수는 배열안에 있는 각 원소를 변환하여 새로운 배열을 만든다. react에서 동적인 배열을 랜더링해야 할 때는 이 함수를 사용하여 일반 데이터 배열을 react element로 이루어진 배열로 변환해주면 된다.
🤔 배열에 항목 제거하기 이때, User 컴포넌트의 삭제버튼이 클릭될 때, user.id값을 앞으로 props로 받아올 onRemove 함수의 파라미터로 넣어 호출해야 한다. (onRemove함수는 "id가 ~인 객체를 삭제하라"는 역할) 이때, onRemove함수는 UserList에서도 전달받고, 이를 그대로 User 컴포넌트에게 전달한다.
이제 onRemove를 구현해보자. 배열에 있는 항목제거 시, 추가할 때와 마찬가지로 불변성을 지켜가며 업데이트 해줘야 한다. 이때, filter라는 배열 내장 함수를 사용하는 것을 추천!!
App.js
import React from 'react';
import InputSample from './InputSample';
function App() {
return (
<InputSample />
);
}
export default App;
여기에 대해, input에 입력하는 값이 아래에 나타나고, 초기화버튼을 누르면 input 값이 비워지도록 구현해보자. useState를 사용, input의 onChange 이벤트를 사용할 때, 이벤트에 등록하는 함수에서는 이벤트 객체e를 파라미터로 받아와서 사용 할 수 있고, 이 객체의e.target은 이벤트가 발생한 DOM 인 input DOM 을 가르키게 된다. 이 DOM 의value값, 즉e.target.value를 조회하면 현재 input 에 입력한 값이 무엇인지 알 수 있으며, 이 값을 useState를 통해 관리해주면 된다.
let num = new Array(4); // 배열크기가 4인 num배열 선언
let arr = ['a', 'b', 'c', 'd'];
for (let i = 0; i < arr.length; i++){
document.write("<p>" + arr[i] + "</p>");
}
◼︎ Array 객체 메서드 ∙ concat ∙ every ∙ filter ∙ forEach ∙ indexOf : 주어진 값과 일치하는 배열요소의 첫 인덱스를 찾는다. ∙ join :배열 요소를 문자열로 합치며 구분자를 지정 가능 ∙ push :맨끝에 요소 추가 ∙ unshift:시작부분에 요소 추가 ∙ pop :맨끝 요소 반환 ∙ shift :첫 요소 반환 ∙ splice:배열에 요소 추가/삭제 ∙ slice:배열에 특정부분 잘라냄 ∙ reverse ∙ sort ∙ toString:배열에서 지정한 부분을 문자열로 반환, 요소는 (,)로 구분
◼︎ Date 객체를 사용해 날짜와 시간을 지정. - 이때, JS가 인식할 수 있는 형식으로 날짜와 시간을 써야한다.
1. YYYY-MM-DD 형식 2. YYYY-MM-DDTHH 형식 3. MM/DD/YYYY 형식
new Date("2023-07-05")
new Date("2023-07-05T20:41:13")
new Date("02/28/2025")
◼︎ Date 객체 메서드
🤔 Math 객체 ◼︎ 사용 방식
Math.프로퍼티명
Math.메서드명
ex)
Math.random()
◼︎ Math 객체 property 및 메서드
3. 브라우저 관련 객체
웹 브라우저 창에 문서가 표시되면 브라우저는 HTML소스를 한줄씩 읽으며 화면에 내용을 표시, 관련 객체를 생성한다.
4. 문서객체모델 (DOM)
📌 DOM 트리
📌 DOM 구성 기본원칙
모든 HTML 태그는 요소(element)노드이다.
HTML 태그에서 사용하는 텍스트 내용은 자식노드인 텍스트 노드이다.
HTML 태그의 속성은 자식노드인 속성노드이다.
주석은 주석(comment)노드이다.
🤔 DOM 요소에 접근하고 속성 가져오기
📌 DOM에 접근하기
// id 선택자로 접근하는 getElementById() 메서드
요소명.getElementById("id명")
// class값으로 접근하는 getElementByClassName() 메서드
요소명.getElementByClassName("class명")
// 태그 이름으로 접근하는 getElementByTagName() 메서드
요소명.getElementByTagName("태그명")
// 다양한 방법으로 접근하는 querySelector(), querySelectorAll() 메서드
노드.querySelector(선택자)
노드.querySelectorAll(선택자 | 태그)
🤔 미디어 쿼리(media queries)란? CSS의 모듈로 사이트에 접속하는 장치에 따라 특정 CSS스타일을 사용하는 방법. 즉, 접속 기기의 화면 크기에 따라 레이아웃이 달라진다.
◼︎ Media Queries 기본형
@media [only | not] 미디어 유형 [and 조건] * [and 조건]
ex)
@media screen and (min-width: 720px) and (max-width: 1440px) {
...
}
위에 미디어 유형에 들어가는 미디어 유형의 종류는 다음과 같다. ∙ all : 모든 미디어 유형에서 사용할 CSS ∙ print : 인쇄장치에서 사용할 CSS ∙ screen : 컴퓨터 및 스마트폰 스크린에서 사용할 CSS ∙ tv : 음성과 영상이 동시에 출력되는 TV에서 사용할 CSS ∙ aural : 음성 합성 장치에서 사용할 CSS ∙ handheld : 태블릿 같은 장치를 위한 CSS ∙ projection : 프로젝터를 위한 CSS ∙ tty : 디스플레이 기능이 제한된 장치를 위한 CSS
/*웹 문서의 가로 세로 길이 속성*/
@media screen and (min-width: 1440px) {...}
/*단말기의 가로 세로 길이 속성*/
@media screen and (min-device-width: 375px) and (min-device-height: 812px) {...}
/*화면 회전 속성*/
@media screen and (min-device-width: 812px) and (orientation: landscape) {...}
============<미디어 쿼리 적용하기>============
/*외부 CSS파일 연결하기*/
방법 1.
<link rel="stylesheet" media="미디어 쿼리 조건" href="css 파일경로">
방법 2.
@import url(css파일 경로) 미디어 쿼리 조건
/*웹 문서에 직접 정의하기*/
방법 1.
<style media="<조건>"> {
<스타일 규칙>
}
</style>
방법 2.
<style>
@media <조건> {
<스타일 규칙>
}
</style>
조건 예시: screen and (max-width: 320px)
스타일 규칙 예시: background-color: orange;
2. 그리드 레이아웃
🤔 그리드 레이아웃이란? 화면 너비에 따라 웹 문서의 요소를 재배치 해야하는데, 기준이 되는 레이아웃으로 사용하는 방법 웹 사이트를 여러 column으로 나눈 후 화면에 맞게 배치하는 방법
[그리드 레이아웃의 3가지 특징] - 시각적 안정된 디자인 생성가능 - 업데이트가 편한 웹디자인 구성가능 - 요소를 자유롭게 배치가능
상위요소 하위요소
section p {}
상위요소(section) 하위요소(p)
ex)
section p {color: blue;}
</style>
...
<section> /*section의 모든 하위 p 요소에 적용 가능*/
<p> ... </p>
<p> ... </p>
Ex)
/* href속성이 있는 a요소를 찾아 ...내용을 적용 */
a[href] {...}
/* <a target="_blank"> 인 요소를 찾아 ...를 적용 */
a[target = _blank] {...}
/*class값 중 button이 있는 요소에만 적용*/
[class ~= button] {...}
/* title 속성값에 us나 us-로 연결된 속성값이 있는 a요소를 찾아 적용 */
a[title |= us] {...}
/* title 속성값이 eng로 시작하는 a요소를 찾아 적용 */
a[title ^= eng] {...}
/* href에 링크된 파일이름의 마지막 단어가 xls를 찾아 적용 */
[href $= xls] {...}
/* href속성값 중 'w3' 이 포함된 요소 선택후 적용 */
[href *= w3] {...}