react 공부를 했는데 hook 개념을 이해했다!

 

<변수의 값이 바꿔 화면에 값이 바뀌도록 구현할 때, UI가 그대로>인 상황을 통해 hook이 필요하다는 사실을 알았다.

react에서 컴포넌트가 기본적으로 1번만 실행되기 때문에 재실행 되기 위해서는

react의 useState를 활용해 "react야 재실행해" 라는 동작을. . 진행해야했다

 

여기에 더해 custom hook를 언제 쓰는지가 궁금했는데

input을 여러개 사용하는 컴포넌트에서 userInput이라는 훅을 만들면 코드를 가독성있게 만들 수 있다는 걸 알았다.

onChange, value, reset 등의 prop들을 묶어 만드는 것이었다..!

 

react에서 더 나아가 next.js 특징도 살펴봤다. (특징들이 신기하다.)

1. 폴더 구조 대로 routing을 할 수 있다.

2. hook을 쓸 때는 파일 맨 앞에 "use client"라고 명시해야 한다. (백과 구분하기 위함이라는데)

3. 객체 타입을 정의할 때 type이나 interface 로 작성한다.

 

플젝에 바로 투입하니 공부가 슉슉 진행되는 듯 하다 

파이팅!~!~!

'오늘의개발TMI' 카테고리의 다른 글

[오늘의개발TMI_250510] : 사이드 프로젝트 시작  (0) 2025.05.10
[오늘의개발TMI_250425]  (0) 2025.04.25
[오늘의개발TMI_250423]  (0) 2025.04.23
[오늘의개발TMI_250417]  (2) 2025.04.17

아는 개발자분과 함께 사이드 프로젝트를 시작했다! 

next.js 프레임워크로 프론트 개발 공부를 할 예정이다~

 

맥북 command로 아래 명령어를 쳤는데,, 

npx create-next-app

 

⚠️ EACCES 오류가 발생했다 !! : permission denied, mkdir ...

💡cmd에 sudo chown -R $(whoami) ~/.npm 입력 (현재 사용자에게 ~/.npm 폴더의 소유권을 부여하겠다는 뜻이다)

원인: 패키지 설치 당시에 sudo 로 설치하면 CLI 명령어가 명령어를 실행한 유저의 소유자로 기본 지정되기 때문에 발생하는 문제라고 함.

 

--------------------

 

누가 만든 프로젝트를 vscode로 clone했을 때,

내 폴더 내 환경 세팅이 덜 되어있어서 빨간줄 에러가 발생했다.!

 

⚠️ Vscode에 빨간줄 -> JSX element implicitly has type 'any' because no interface 'JSX.IntrinsicElements' exists.ts

💡타입스크립트에서 JSX를 사용하려면 JSX를 이해할 수 있는 React 타입 정의 파일이 있어야 하는데 설치되지 않고 누락됐을때 발생.

npm install --save-dev @types/react@latest @types/react-dom@latest
npm install react@latest react-dom@latest

 

그 밖에도 빨간줄을 없애기 위해 아래 명령어들로 설치를 진행했다. .!

 

npm install @tanstack/react-query

npm install @tanstack/react-query-devtools

npm i --save-dev @types/node

npm install zustand

'오늘의개발TMI' 카테고리의 다른 글

[오늘의개발TMI_250511] : React 그리고 .. Next.js  (0) 2025.05.11
[오늘의개발TMI_250425]  (0) 2025.04.25
[오늘의개발TMI_250423]  (0) 2025.04.23
[오늘의개발TMI_250417]  (2) 2025.04.17

1. 이전에 trigger로 특정 테이블의 칼럼들이 변경될때마다 변경이력 테이블에 데이터를 쌓는것을 구현했었는데

필드를 각각 type별로 다른 로직을 처리했고, 코드 길이도 무진장 길어졌다. (칼럼들이 몇백개...,,

심지어 칼럼명이 바뀔때마다 계속 수정해야해서 번거로웠다.

 

직장 상사분께 조언을 (아이디어를) 구했는데 다음주 월요일에 알려주신다고했다. ㅋㅋ

방법이 무엇일지 너무 궁금하다. 다음주에 해결책을 메모해야겠다~~ 

 

2. 웹 페이징처리를 자바스크립트로 열심히 구현했다.

내가 필요한 것은

전체 데이터 개수 + 자르는 데이터크기 + 현재 페이지번호 + 전체페이지 수 (math.floor로 올림)

이거면 충분했다~~

 

 

오늘은 modal 창 open해서 props 전달하고 작업하고 닫을때 result로 값들 다시 보내주는 작업을 계속했다 ~,~,,,,,,

큐큐 

 

최대한 한 파일도 비슷한 와꾸의 화면들을 같이 쓰는걸 고민했다..

모달창마다 화면이 거의 동일하지 않아서..(심지어 디펜던시도 있음 모달검색팝업A에서 선택 후 해당 값으로 필터링 해서 다른 모달검색팝업B 띄우기)

흠 더 고민해봐야겠다 

 

그리고 공통 인풋 컴포넌트에서 이벤트 발생 시, preventdefault 메서드를 줬더니

일부 화면에서는 문자열 키는 잘 되는데 enter키나 backspace키나 space 키 등등 바로 먹지 않았다..

(근데 왜 일부 화면에서는 잘 먹히는 지 의문)

 

안 먹혔던 상황은 모달창 화면 띄우고 쓸 때 발생했는데 ! 왜 ..? 그런것이지 ..? 

근데 사실 이상황에서도 모달창 내 다른 컴포넌트에 이벤트를 주고 다시 그 인풋 컴포넌트를 focus할 때는 특수키들이 잘먹었다..

모달창 때문에 이벤트가 꼬인 것일까 ..? 흠.. 이건 앞으로도 고민할 예정이다.

 

자식 -> 부모 : 자식에서 customEvent로 detail 속성 주고 넘겨주기

부모 -> 자식 : 부모에서 props나 메서드를 활용해 필요한 정보 넘겨주기

(문제)

button 컴포넌트에서 이벤트를 받아서 확인하려는데 

event.target으로 주니

내부에 있던 span 태그와 다른 아이콘 이미지 위에다가 마우스로 클릭했을 때 undefined가 떴었다..

currentTarget으로 하니 잘 동작하는 거다..

 

(원인)

event.target은 이벤트가 발생한 요소 그 자체

event.currentTarget은 handler가 연결된(위에서는 button 태그)요소

 

위 상황에서 버튼 이벤트를 잘 받아오기 위해서는 currentTarget을 썼어야 했다.

흠흠

오랜만에 블로그에 들어왔다.!
항상 기록하는 습관을 가져야 하는데 쉽지가 않다..ㅠㅠ

 

그래서 오늘부터 간단하게라도 회고하는 글을 쓰기로 결심했당!

 

벌써 회사를 다닌지 6개월이 넘어가는뎅,,

나름 바쁘게 살아왔는데 (야근 ..)

남는게 있었는지 돌아보게 된다.

 

그동안은 일을 마감 안에 잘 끝내는 게 목표였다면 

요즘엔 어떻게 하면 더 코드를 더 잘 짤 수 있을까 하는 고민을 하고 있다!

 

그리구 프론트 개발 잘하고 싶다 ! (참고로 글쓰니는 백,프론트 둘다 하고 있습니당)

javascript 책 완독했다고 금방금방 적용되는 건 아닌데 

마음만 급해진다웅 실전에 빨리 적용하고 싶어서 !!! 출근하고 싶다. (라는 망언)

 

얼른 베테랑이 되고 싶다아ㅏ아아ㅏ아아ㅏ악

 

 

[js] event.target vs. event.currentTarget

(문제)button 컴포넌트에서 이벤트를 받아서 확인하려는데 event.target으로 주니내부에 있던 span 태그와 다른 아이콘 이미지 위에다가 마우스로 클릭했을 때 undefined가 떴었다..currentTarget으로 하니

spacewalk00.tistory.com

 

 

[js] 이벤트 핸들링 - 부모<->자식

자식 -> 부모 : 자식에서 customEvent로 detail 속성 주고 넘겨주기부모 -> 자식 : 부모에서 props나 메서드를 활용해 이벤트 발생하기

spacewalk00.tistory.com

 

 

 

this 키워드

- 메서드가 자신이 속한 객체의 프로퍼티를 참조하려면 먼저 자신이 속한 객체를 가리키는 식별자를 참조해야 함.
- 생성자 함수 내부에서는 프로퍼티 또는 메서드를 추가하기 위해 자신이 생성할 인스턴스를 참조해야 함.

 

this (자기 참조 변수)
- 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 특수한 식별자가 필요했다.

- 자바나 c++ 같은 클래스 기반 언어 : this는 언제나 클래스가 생성하는 인스턴스를 가리킴.

- 자바스크립트 : this는 함수가 호출되는 방식에 따라 this에 바인딩될 값이 결정됨.

   - 전역에서 this는              전역 객체 window를 가리킴

   - 일반 함수 내부에서는      전역 객체 window를 가리킴  (strict mode가 적용되면 undefined가 바인딩 됨.)

   - 메서드 내부에서는          메서드를 호출할 객체를 가리킴

   - 생성자 함수 내부에서는  생성자 함수가 생성할 인스턴스를 가리킴

 

함수 호출 방식과 this 바인딩

- 동일한 함수도 다양한 방식으로 호출할 수 있음

 

const foo = function() {
	console.dir(this);
};

//1. 일반 함수 호출
foo(); //window

//2. 메서드 호출
const obj = {foo};
obj.foo(); //obj

//3. 생성자 함수 호출
new foo(); // foo{}

//4. Function.prototype.apply/call/bind 메서드에 의한 간접 호출
foo.call(bar);
foo.apply(bar);
foo.bind(bar)();

1.  일반 함수 호출

일반 함수로 호출된 모든 함수(중첩 함수, 콜백 함수 포함) 내부의 this는 전역 객체가 바인딩된다.

 

var value = 1;

const obj = {
	value: 100,
    foo() {
    	console.log("foo's this: ", this);  {value:100, foo:f}
        
        //콜백 함수 내부의 this에는 전역 객체가 바인딩됨.
        setTimeout(function () {
        	console.log("callback's this :: ", this); //window
            console.log("callback's this.value :: ", this.value); //1
        }, 100);
    }
};

obj.foo();

 

- 메서드 내부의 중첩 함수나 콜백 함수의 this 바인딩을 메서드의 this 바인딩과 일치시키기 위한 방법

   ->1)  Function.prototype.apply, call, bind 메서드 활용

   ->2) 화살표 함수 활용

 

var value = 1;

const obj = {
	value: 100,
    foo() {
    
    	//bind 함수
    	console.log("foo's this: ", this);  {value:100, foo:f}
        setTimeout(function () {
           console.log(this.value); //100
        }.bind(this), 100);
        
        //화살표 함수 내부의 this는 상위 스코프의 this를 가리킴
        setTimeout(() => console.log(this.value), 100);
    }
};

obj.foo();

 

2. apply, call, bind 메서드에 의한 간접 호출

- apply, call의 대표적인 용도 : arguments 객체와 같은 유사 배열 객체에 배열 메서드를 사용하는 경우

   - arguments는 배열이 아니기 때문에 Array.prototype.slice와 같은 배열의 메서드를 사용하지 못하나 apply 나 call 메서드로 가능

function convertArgsToArray() {
	console.log(arguments);
    
    //arguments 객체를 배열로 변환
    const arr = Array.prototype.slice.call(arguments);
    console.log(arr);
    
    return arr;
}

convertArgsToArray(1, 2, 3); // [1,2,3]

 

- bind 메서드는 apply와 bind와 달리 함수를 호출하지 않고,

첫 번째 인수로 전달한 값으로 this 바인딩이 교체된 함수를 새롭게 생성해 반환

 -> 메서드의 this와 메서드 내부의 중첩 함수 또는 콜백 함수의 this가 불일치하는 문제를 해결하기 위해 유용하게 사용됨.

function getThisBinding() {
	return this;
}

const thisArg = { a:1 };

// bind 메서드는 첫번째 인수로 전달된 thisArg로 this 바인딩이 교체된 getThisBinding 함수를 새로 생성해 반환
console.log(getThisBinding.bind(thisArg)); // getThisBinding
// bind 메서드는 함수를 호출하지 않으므로 명시적으로 호출해줘야 함.
console.log(getThisBinding.bind(thisArg)()); // { a:1 }

+ Recent posts