react 컴포넌트가 unmount 된 후 setState가 실행되는 문제 해결 방법
·
WEB/React
리액트로 개발을 하다보면 한번은 아래와 같은 warning메세지를 보게됩니다. Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function. 현재 해당 warning 메세지는 최초 1회만 나타나고, 브라우저를 새로 고침 하기 전에는 다시 나타나지 않으니 코드 수정 후 확인 할 시에 주의가 필요합니다. 해당 에러는 fetch 등 비동기를 실행하는 실행 컨텍스트가 완..
callback과 promise의 차이점
·
WEB/JavaScript
자바스크립트에서 비동기를 처리할 때 callback과 promise를 사용하게 되는데 이 둘의 차이점을 그저 callback을 썼을 때는 callback hell 때문에 가독성이 떨어지는 것 말고 더 명확하게 알기 위해서 정리를 합니다. 1. callback을 사용한 비동기 처리 자바스크립트에서 비동기가 처리되는 방식은 아래 영상으로 대체. https://youtu.be/8aGhZQkoFbQ function async(callback) { setTimeout(() => { callback("1초 후 실행"); }, 1000); } async(function (msg) { console.log(msg); }); async 함수는 첫번째 인자로 callback을 받고, callback이 실행 될 때 첫 번째..
object의 Enumerable 설정하는 방법
·
WEB/JavaScript
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty Object.defineProperty() - JavaScript | MDN Object.defineProperty() 정적 메서드는 객체에 직접 새로운 속성을 정의하거나 이미 존재하는 속성을 수정한 후, 그 객체를 반환합니다. developer.mozilla.org Object 등의 prototype을 수정하는 것은 왠만하면 피해야하지만 만약 메소드를 추가해야 한다면 해당 메소드가 for...in 루프나 Object.keys() (en-US)에서 노출 되지 않도록 숨기는 것이 좋은 습관이다. 위 예제 처럼 String.prot..
폴더 안의 파일을 모두 import 하는 방법
·
WEB/React
개발 요구사항 중에 config 파일을 입력하면, 메뉴가 자동으로 생성되는 기능이 있었습니다. react router dom의 Router 안에 Link 메뉴가 생성되는 것은 map 메서드를 통해 생성이 가능하지만 Switch 컴포넌트는 수작업을 해주어야 해야합니다. 하지만 컴포넌트 파일이 없을 경우에는 404페이지가 자동으로 뜨게하고 싶어서 찾아보았습니다. 이런 특수한 사항이 아니라면 역시 권장하는 방법은 아닐것 같습니다. const Pages = importAll(require.context("./pages")); function importAll(r) { let files = {}; r.keys().map((item, index) => { files[item.replace("./", "")] = r..
react 컴포넌트에 websocket 적용하기
·
WEB/React
코드 ver 0.2 import React, { useEffect, useState, useRef } from "react"; const SocketTest = () => { const [socketConnected, setSocketConnected] = useState(false); const [sendMsg, setSendMsg] = useState(false); const [items, setItems] = useState([]); const webSocketUrl = `ws://websocket.com`; let ws = useRef(null); // 소켓 객체 생성 useEffect(() => { if (!ws.current) { ws.current = new WebSocket(webSocke..
한 컴퓨터에서 github 계정 두개 이상 연동하기
·
Git
# Personal account-userA Host github.com-userA HostName github.com User git IdentityFile ~/.ssh/id_rsa_userA # Personal account-userB Host github.com-userB HostName github.com User git IdentityFile ~/.ssh/id_rsa_userB​ # Personal account-userA Host github.com-userA HostName github.com User git IdentityFile ~/.ssh/id_rsa_userA # Personal account-userB Host github.com-userB HostName github.com Use..
redux 강의 기본 핵심 튜토리얼 5탄 - redux data 사용하기
·
WEB/React
단일 게시물 나타내기 Redux 스토어에 새 게시물을 추가 할 수있는 기능이 있으므로 게시물 데이터를 다양한 방식으로 사용하는 몇 가지 기능을 추가 할 수 있습니다. 현재 게시물 항목이 기본 피드 페이지에 표시되고 있지만 텍스트가 너무 길 경우 콘텐츠의 일부만 표시됩니다. 자체 페이지에서 단일 게시물 항목을 볼 수있는 기능이 있으면 도움이 될 것입니다. 단일 게시물 페이지 만들기 먼저 게시물 기능 폴더에 새 SinglePostPage 구성 요소를 추가해야합니다. 페이지 URL이 /posts/123과 같은 경우 React Router를 사용하여이 구성 요소를 표시합니다. 여기서 123 부분은 표시하려는 게시물의 ID 여야합니다. // features/posts/SinglePostPage.js import ..
redux 강의 기본 핵심 튜토리얼 4탄 - redux data flow
·
WEB/React
이번 파트에서는 createSlice를 사용해서 reducer로직의 slice를 store에 추가하는 방법과 useSelectore, UseDispatch 사용밥법에 대해서 알아보겠습니다. 프로젝트 설정 react와 redux가 설정되어 있고, 기본적인 css와 API 요청을 가능하게하는 fake REST API가 있는 프로젝트 예제입니다. 이를 토대로 배워보도록 하겠습니다. 코드는 CodeSandbox를 통해 확인할 수 있고, fork를 해서 진행 할 수 있습니다. 또는 github 저장소에서 clone을 해도 됩니다. codesandbox.io/s/github/reduxjs/redux-essentials-example-app/tree/master/?from-embed reduxjs/redux-esse..
redux 강의 기본 핵심 튜토리얼 3탄 - redux app 구조
·
WEB/React
이전 포스트에서 redux의 용어와 개념에 대해서 설명했습니다. 이번 포스트에서는 실제 코드 예제를 살펴보고 어떻게 동작이 되는지 살펴 보겠습니다. 카운터 앱 예제 살펴볼 샘플 프로젝트는 버튼을 클릭 할 때 숫자를 더하거나 뺄 수 있는 작은 카운터 앱입니다. 간단하지만 react + redux 애플리케이션이 어떻게 동작하는지 알 수 있습니다. 이 샘플 프로젝트는 cra의 공식 redux템플릿(github.com/reduxjs/cra-template-redux)을 사용했습니다. redux-toolkit을 사용하여 redux store 및 로직을 만들고 react-redux(react-redux.js.org/)를 사용하여 redux store와 react 컴포넌트를 함께 연결 하는 표준 redux 구조로 구..