March 24, 2023 • ☕️☕️ 8 min read
타지에서 루틴 찾기
Document.execCommandHTML 문서가 designMode일 때, document 객체의 execCommand 메서드를 사용하여 현재 편집 가능한(editable) 영역(ex. form input, contentEditable 요소)을 조작할 수 있다.
현재는 ClipboardAPI가 나오면서 deprecated되었지만, 여전히 일부 상황에 유용하게 쓰일 수 있다.
예) 사용자가 선택한 영역에서 특정 문자열을 찾아서 교체하는 것
// 텍스트 복사 (클립보드에 저장)
document.execCommand("copy"); // 기존 방식
window.navigator.clipboard.writeText();Ref https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
자바스크립트 객체는 두 가지 타입이 있다: 순수(리터럴) 객체, 클래스(생성자) 객체
API 등으로 받아온 리터럴 자바스크립트 객체를 ES6 클래스로 바꾸고 싶을 때, JSON.parse 를 이용하면 원하는 클래스의 인스턴스로 만들 수 없다. (여전히 리터럴 자바스크립트 객체다.)
이 리터럴 자바스크립트 객체를 클래스의 인스턴스로 만들어주고 싶을 때 class-transformer 를 사용한다~
fetch("users.json").then((users: Object[]) => {
const realUsers = plainToClass(User, users);
// 이제 realUsers의 각 user는 User 클래스의 인스턴스가 된다.
});Ref https://github.com/typestack/class-transformer#what-is-class-transformer
Interceptor🚦 Interceptor로 Response Transformer 만들기
xor두 배열에서 서로 중복되지 않은 데이터를 뽑아 새로운 배열로 만든다.
_.xor([2, 1], [2, 3]);
// => [1, 3]Ref https://lodash.com/docs/4.17.15#xor
scroll listener에 caching과 throttling을 걸어도 IntersectionObserver가 더 부하가 적다.
Ref https://itnext.io/1v1-scroll-listener-vs-intersection-observers-469a26ab9eb6
matchreact-router의 match는 route path와 url의 매칭에 관한 정보를 가지고 있다.
아래처럼 사용
<Switch>
<Route path="/:type" component={MyPage}></Route>
{/* ... */}
</Switch>// MyPage.tsx
const MyPage = ({ match }) => {
const pageType = match.params.type;
};🤓 팁
match는 route → componentprops는 component → component 로 변수를 넘길 때 사용한다.
role/aria-hidden 어트리뷰트를 지정하는 것은 각각 아래와 같은 의도의 차이가 있다
input에서 엔터키를 눌렀을 때 상위 form의 onSubmit 이벤트의 트리거를 막기 위해서는 e.preventDefault()를 사용한다.
onKeyDown, onKeyPress 등 먼저 실행되는 이벤트에 대한 핸들러에 preventDefault를 사용해도 submit 이벤트가 막히지만, onKeyUp 이벤트의 핸들러에서는 preventDefault를 해도 submit 이벤트가 막히지 않는다
이미 keydown, keypress가 먼저 실행되어 submit이 되버리기 때문이다…
watch vs getValues: getValues는 값이 변경될 때 리렌더링이 트리거되지 않고 인풋의 변경에 subscribe하지 않는다.resetField
option에 defaultValue를 넣지 않으면 필드 자체의 defaultValue로 돌아간다.defaultValue를 넣으면 해당 값으로 필드 값이 변경되고 필드의 defaultValue가 해당 값으로 업데이트된다.vite에서 local 환경 실행 시, https를 사용하려면 vite.config.ts 파일에 아래와 같이 서버 설정을 추가해야 한다.
server: {
host: "my.baemin.com",
port: 3000,
https: {
key: fs.readFileSync("./key.pem"),
cert: fs.readFileSync("./cert.pem"),
},
},HTMLElementEventMap - window event들을 모아 놓은 집합의 타입 정의(Ref)깃랩 등 마크다운 에디터에서 이미지를 복사+붙여넣기 시 이미지의 크기를 지정할 수 없는데, 붙여넣어진 raw image 텍스트 영역을 선택만 하면 자동으로 <img> 태그로 변환하여 크기를 조절할 수 있게 해주는 익스텐션이다. 최고선배 팀원 분께서 만들어주셨는데 엄청 유용하게 쓰고 있다. 😎
이게 머선 일이고…
Ref https://news.hada.io/topic?id=8782
ChatGPT로도 진짜 코드를 짜주는구나..! 🙀 그러면 Copilot은 무슨 소용이지? (그래도 더 특화됐겠지?)
그래도 아직 실직하진 않을 것 같다.
Ref https://fe-developers.kakaoent.com/2023/230323-chatgpt-and-fe-developer/
대화형 코파일럿으로, 코파일럿을 이미 사용하고 있는 사람만 신청 가능하다고 한다.
대체 어디까지 가는거야…
Ref https://github.com/features/preview/copilot-x
Copilot, ChatGPT 등 AI의 도움을 받은 컨텐츠들이 난무하는 세상 속에 AI 콘텐츠가 아닌 ‘진짜 사람’이 만든 저작물에 붙일 수 있는 notbyai 뱃지라는 것도 등장했다…
(법적으로 실효성이 있는 건 아니다)
ChatGPT 등 텍스트 기반 명령어를 입력하는 ‘프롬프트’ 입력이 기반이 되는 도구에, 내부 기술 정보에 대한 질문을 하여 대외비를 탈탈 털어간다. ㅋㅋㅋ 웃을 일이 아닌데, 웃기다… 🤦♀️
Ref https://yozm.wishket.com/magazine/detail/1939/
한 주를 또 열일하며 보내고, 주말엔 골드코스트에 다녀왔다. 3년 전 호주를 왔던 기억이 제일 생생하게 잘 떠오르던 곳이었다. 넘 어렵지만 재밌었던 바다서핑도 배우고, 코알라 모자를 뒤집어쓴 캥거루 인형을 샀던 스타벅스에서 자바칩 프라푸치노 먹으며 힐링했다. 저녁은 폭립&킹새우로 flex… 근데 사이드로 나온 고구마튀김이 젤 맛있었다 ㅎ 한국에 수입하고 싶다.
그리고 일요일에 온갖 근육통을 안고 테크트리 해커톤 달려버렸다… 🏃♀️ 이렇게 또 호주에서의 주말이 순삭되었당