August 20, 2022 • ☕️ 4 min read
우영우가 끝났다
Next.js에서 locale을 설정하는 방법은 2가지가 있다.
첫번째 방법은 아래와 같이 i18n 설정을 next.config.js 파일에 추가하는 방식이다.
i18n: {
locales: ['ko'],
defaultLocale: 'ko',
},
그러나 이 방법을 사용하게 되면 url이 다음과 같이 표시된다.
http://localhost:3000/ko/packages
ko/
라는 locale 정보가 url에 같이 들어가게 되는데, 국제화를 고려중이지 않는다면 다른 방법을 사용하는 것이 좋다.
그 다른 방법은 아래와 같이 custom document
를 이용하는 방식으로, _document.tsx
파일에 다음과 같이 작성하는 것이다.
import NextDocument, { Html, Head, Main, NextScript } from "next/document";
import React from "react";
type Props = {};
class Document extends NextDocument<Props> {
render() {
return (
<Html lang="ko">
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
}
Class constructor <React Class component> cannot be invoked without 'new'
문제를 어떻게 해결할까?
React Element는 일반 객체이므로 변수에 저장할 때 observable
로 바뀌면 안 된다. (Mobx는 기본적으로 클래스 인스턴스를 제외한 모든 데이터 구조를 재귀적으로 observable
로 만든다.)
observable.shallow
는 얕은 복사를 하기 때문에 observable
과 다르게 객체 내부 값들까지 observable로 변환하지는 않는다.
export class ToastStore {
toasts: ReactElement<Toast>[] = [];
constructor() {
makeObservable(this, {
toasts: observable.shallow,
});
}
}
즉, mobx 스토어에 ReactElement
를 저장할 땐 observable.shallow
를 써야 한다.
Ref https://github.com/mobxjs/mobx/issues/3503
.match()
vs .exec()
String.prototype.match()
와 Regex.prototype.exec()
은 동일한 메서드다. 문자열이 정규식과 매치되는 부분을 검색한다.
str.match(reg);
reg.exec(str);
// 서로 반대
다만 g
플래그에 따라 조금 다른 결과를 반환한다. 정규식에 g
플래그가 포함되어있지 않으면, str.match()
는 RegExp.exec()와 같은 결과를 반환한다. 반환된 배열은 원래 문자열의 값을 가지는 input
속성을 포함한다. 그리고 문자열에서 제로 베이스의 인덱스를 나타내는 index
속성 또한 포함한다.
ref 객체에는 두 가지 패턴이 있다.
useRef
또는 클래스 컴포넌트에서 createRef
로 생성되는 객체.current
프로퍼티를 가지고 있다.(instance: T) => void
이다.emotion에서 아래와 같은 vendor prefix를 자동으로 넣어준다.
transition-property: transform;
-webkit-transition-property: -webkit-transform;
transition-timing-function: cubic-bezier(0.08, 0.5, 0.77, 0.94);
-webkit-transition-timing-function: cubic-bezier(0.08, 0.5, 0.77, 0.94);
transition-property: transform;
transition-timing-function: cubic-bezier(0.08, 0.5, 0.77, 0.94);
anchor 태그에는 type
이라는 attribute가 이미 있다. 링크 URL의 MIME type을 나타낸다. (링크)
Gitlab CI/CD pipeline에서 include files .gitlab-ci.yml does not have valid YAML syntax!
와 같은 error가 발생한다면 include한, 즉 .gitlab-ci.yml
에 명시한 파일들을 모두 불러올 수 있는지 확인해봐야 한다. node
를 기준으로 yml
파일을 작성했는데 어디서 gradle
을 사용하고 있다든가 하는 경우에 해당 에러가 발생할 수 있다.
regression test - 이미 테스트된 프로그램의 테스팅을 반복하는 것으로, 결함 수정 이후 변경의 결과로 새롭게 만들어 지거나, 이전 결함으로 인해 발견되지 않았던 또 다른 결함을 발견하는 테스트
aws cloudfront가 http3를 지원한다. (링크)
overscroll-behavior-y
를 사용하면 화면의 터치스크롤 여부를 정할 수 있다. (링크)
ref
에 setState
를 넣을 수 있다.
const [divElement, setDivElement] = useState<HTMLElement | null>(null);
<div ref={setDivElement} />;
ol
태그에는 reversed
등 특화된 attribute를 쓸 수 있다
regex.replace()
- regex.replace()
에서 $1
과 같은 비표준 속성을 쓸 수 있다 (MDN)
컴포넌트의 props 타입을 가져올 때 아래와 같이 작성할 수 있다.
type Props = typeof MyComponent.prototype.props;
광복절을 하루 낀 주라 그런지 괜히 여유롭다… 첫 피트스탑이기도 하고, 사장님프론트개발팀 첫 워크샵이기도 하고. 워크샵은 정말 알차고 재밌었당. K-부동산 게임은 예측불허였고, 펭귄 게임을 얻어와서 기쁘다!
그리고 우영우 마지막화가 끝났다! 계속 마지막화에 머물게 된다 ㅠㅠ 아쉽다. 영우준호 행복해야해…