import React from 'react';import { motion, useAnimation } from 'framer-motion';const items = ['아이템 1', '아이템 2', '아이템 3', '아이템 4'];const ListComponent = () => { const handleViewportEnter = (index) => { console.log(`컴포넌트 ${index + 1}가 뷰에 노출되었습니다.`); }; return ( {items.map((item, index) => ( handleViewportEnter(index)} > {item} ))} );};export..
전체 글
import React, { useState, useEffect } from 'react';import { motion } from 'framer-motion';const ConditionalAnimationComponent = () => { const [isVisible, setIsVisible] = useState(false); return ( {isVisible ? '애니메이션 실행' : '애니메이션 대기 중'} );};export default ConditionalAnimationComponent;
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI3VJF%2FbtsHPyGEUCz%2FwWNulaCDVKLypz4jKAbVyK%2Fimg.png)
리액트 렌더링 동작은 3가지 과정으로 나뉜다1. 렌더링 트리거 2. 컴포넌트 렌더링3. DOM 커밋 렌더링이 일어나는 이유리액트에서 컴포넌트 렌더링이 일어나는 이유는 2가지가 있습니다.1. 컴포넌트의 초기 렌더링2. 컴포넌트의 state가 없데이트 된 경우 1. 렌더링 트리거렌더링 트리거란 리액트에 렌더링을 요청하는 과정을 의미합니다.컴포넌트 초기 렌더링이란 아래 코드와 같이 앱을 시작할 때의 초기 렌더링을 의미합니다.따라서 리액트는 앱을 시작할 때 초기 렌더링을 트리거 합니다.import Image from './Image.js';import { createRoot } from 'react-dom/client';const root = createRoot(document.getElementById('ro..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyNssj%2FbtsHPfNV3ov%2FmC95h854b9PjyJovdsmfoK%2Fimg.png)
useState를 사용해야 하는 이유지역 변수는 렌더링 간에 유지되지 않는다 => 재렌더링 시 지역변수는 초기화된다. 리액트는 지역 변수를 변경되어도 렌더링을 일으키지 않는다. => 지역변수가 변경되어도 컴포넌트를 다시 렌더링해야 한다는 것을 인식하지 못한다.따라서 컴포넌트를 새로운 데이터로 업데이트하기 위해선 다음 두 가지가 필요합니다. 1. 렌더링 사이에 데이터를 유지해야 한다. 2. 리액트가 데이터 변화를 감지하고 컴포넌트를 다시 렌더링하도록 유발한다. 위 두 가지를 useState 훅이 제공하기 때문에 리액트에서는 let대신 useState를 사용해야 한다. 사용방법const [index, setIndex] = useState(0);
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdiJXh%2FbtsHOZrcVDT%2F3DJxMAoKreQb68Wgx8k4rK%2Fimg.png)
이벤트 전파export default function Toolbar() { return ( { alert('You clicked on the toolbar!'); }}> alert('Playing!')}> Play Movie alert('Uploading!')}> Upload Image );}위 코드에서 버튼을 클릭하면 해당 버튼 이벤트 핸들러의 함수가 먼저 실행되고 이후 div 태그의 이벤트 핸들러 함수가 실행된다.하지만 버튼이 아닌 툴바만을 클릭하면 div의 이벤트 핸들러 함수만 실행된다. 이벤트 전파를 방지하는 방법function Button({ onClick, children }) { return..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGH5XO%2FbtsHNWhNWzM%2FN0NFPoKY0p5xJ6oO7RR68K%2Fimg.png)
이벤트 핸들러에 함수 전달&호출하기// 함수를 전달하기 (올바른 예시) // 함수를 호출하기 (잘못된 예시)올바른 예시에서는 handleClick 함수가 onClick 이벤트 핸들러에 전달된다면 리액트는 해당 함수를 사용자가 버튼을 클릭했을 때만 호출합니다.그러나 잘못된 예시에서는 handleClick 함수가 onClick 이벤트 핸들러에서 호출된다면 리액트는 해당 함수를 사용자가 버튼을 클릭하지 않아도 렌더링 과정에서 호출합니다.이는 리액트가 렌더링 과정에서 JSX 와 { } 내의 자바스크립트가 즉시 실행되도록 구현되어 있기 때문입니다.매개변수가 필요한 함수를 이벤트 핸들러에 전달하고 싶다면?그렇다면 매개변수가 필요한 함수를 이벤트 핸들러에 전달하고 싶으면 어떻게 코드를 작성해야할까요?이는 익명함..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmLk4G%2FbtsHLhsbLSC%2FJDsL52kKayoTc1pTQQWckk%2Fimg.png)
JavaScript에서 객체 자료형, 이터러블 객체, 유사 배열은 모두 다양한 형태의 데이터 구조를 나타내지만, 각기 다른 특징과 사용 방법을 가지고 있습니다.이 세 가지 개념의 관계를 이해하면 JavaScript의 데이터 구조를 더 잘 활용할 수 있습니다. 객체 자료형 (Object)객체는 JavaScript의 기본 데이터 구조 중 하나로, 키-값 쌍의 집합을 나타냅니다.모든 JavaScript 객체는 프로토타입 체인(prototype chain)을 통해 속성(property)과 메서드(method)를 상속받습니다.javascriptconst obj = { name: 'Alice', age: 30, greet: function() { console.log('Hello!'); }}; 특징 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmFYkz%2FbtsHKURk3zZ%2FHySUFxy7Izoem4rxc8h2e1%2Fimg.png)
본 실습은 실습자가 AWS 회원가입을 완료함을 가정하고 진행합니다. 버킷 생성하기우측 상단에 `콘솔에 로그인`을 클릭합니다. `루트 사용자 이메일을 사용하여 로그인`을 클릭합니다.(이메일로 회원가입한 실습자 한정입니다.) `루트 사용자`를 선택합니다.이메일 주소 입력 후 `다음` 버튼을 클릭합니다.이후 비밀번호도 입력합니다. 콘솔 로그인 후 검색창에 S3 입력 후 S3를 클릭합니다. 왼쪽 줄 세개( ≡ ) 아이콘 클릭 후 `버킷`을 클릭합니다. 우측 상단 지역을 변경합니다. (서울로 변경) `버킷 만들기`를 클릭합니다. 버킷 이름을입력합니다.(버킷 이름은 고유해야하며 대문자 사용 불가능, 하이픈(-) 사용 가능 ) 퍼블릭 액세스 설정 해제경고 체크 박스 체크 활성화 이후 선택 사항들은 모두 기본값으..