티스토리 뷰
오늘의 Todo
⭐️ 필수
- 브로셔 준비
- 기술적 의사결정
- [ ] Redux toolkit (현빈)
- [ ] Intersection Observer (수빈)
- [ ] react-cookie (수빈)
- [ ] axios(instance) (수빈)
- [ ] styled-components (수빈)
- 주요 기술 (공통)
- [x] 무한스크롤
- [x] 소셜 로그인
- 기술적 의사결정
- Feature
- [ ] 닉네임 변경 중복확인 로직 변경 (수빈)
- [ ] url env 처리 후 테스트 (수빈)
- [x] cookie 모듈 닉네임 만료시간 수정 (수빈)
- UI (수빈)
- 크로스 브라우징
- [ ] 웹폰트 적용 문제
- 커뮤니티 페이지
- [ ] 게시글 제목 내용 댓글 글자 수 제한
- [ ] 게시글 검색 시 결과 없을 때 보여줄 문구
- 전체 UI 수정
- [ ] 랜딩 페이지, 게임룰 모달
- [ ] 로비 페이지, 설정 모달
- [ ] 게임방 페이지
- [ ] 커뮤니티 페이지
- [ ] 글 수정 및 삭제 페이지
- 크로스 브라우징
- Refactoring (수빈)
- [ ] 중복 스타일 컴포넌트 공통 컴포넌트 분리하여 적용하기
- [ ] modules 폴더 삭제하고 밖으로 모듈 파일 빼기(api 폴더처럼 구조 통일)
- [ ] 에러 해당 파일에 규칙 해제 → eslint 규칙으로 추가
- [ ] feature 폴더 삭제하고 폴더들 밖으로 빼기
- 렌더링 최적화
- [ ] 세션 녹화영상 보기 (수빈)
~ 필수 ⭐️
오후에 프론트끼리 모여서 주요 기술을 간단히 정리했다.
오늘 이거 진짜 다 해야 하는데 10시 반이다.
env처리했는데 왜 ERR_NAME_NOT_RESOLVED 가 뜰까?
깃허브 올리기 전에 했을 때도 그래서 후순위로 미뤘었는데 이제 진짜 해결해야 한다ㅠㅠ
도대체 왜! 왜 안돼!! 흐어엉
내가 바보였군 역시 api url 을 잘못 썼다. / 가 아니라 . 이었음 🤣
https://han-py.tistory.com/441
[react] 실무 개발 환경/배포 환경 설정(.env)
리액트(.env)로 개발 시 개발 환경과 배포 환경에 대한 기본 설정을 해보자. 기본적으로 우리는 Nodejs위에서 개발을 한다. 그리고 package.json 파일에 기본 설정을 하게 된다. 하지만, 개발을 진행하
han-py.tistory.com
[ERROR] Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
https://ko.reactjs.org/docs/forwarding-refs.html
Ref 전달하기 – React
A JavaScript library for building user interfaces
ko.reactjs.org
How do I avoid 'Function components cannot be given refs' when using react-router-dom?
I have the following (using Material UI).... import React from "react"; import { NavLink } from "react-router-dom"; import Tabs from "@material-ui/core/Tabs"; import Tab from "@material-ui/core/Ta...
stackoverflow.com
공식문서 예시를 보고 바꾸었더니 위의 에러는 안 나는데 함수 실행이 안 됐다. 다른 컴포넌트들에도 저 에러 때문에 공통 Input 을 못 쓰고 styled component 를 썼고 계속 고쳐야지 하며 마음의 짐으로 남아있었다. 그런데 더 급한 일들이 많아서 우선 보류하고 날을 잡고 해야겠다ㅠㅠ
부모컴포넌트에서 ref 속성과 props를 내려주면
const ref = React.createRef();
return(
<ChangeNickInput
ref={ref}
{...register('nickname', { required: true })}
/>
)
공통 input 컴포넌트에서 ref와 props를 받는다.
const ChangeNickInput = React.forwardRef((props, ref) => {
return (
<StChangeNickInput
{...props}
forwardedRef={ref}
placeholder="변경할 닉네임을 입력해주세요."
/>
);
});
required 로 지정한 텍스트가 helptext로 나타나는 것까진 확인했다.
그런데 다른 속성들과 에러 메시지들이 helptext로 안 보이고 함수 실행이 안 된다.
eslint 규칙 해제
해당 라인 또는 파일에만 해제해서 사용했는데 지금 rules로 다 추가해야겠다.
https://velog.io/@ainochi95/TypeScript-React-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1
TypeScript React 프로젝트 생성
npx create-react-app 프로젝트이름 --template typescriptyarn add -D eslint prettieryarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parseryarn
velog.io
https://velog.io/@cutyapple/eslint-%EA%B7%9C%EC%95%BD#jsx-a11yno-static-element-interactions
eslint 규약
eslint 규약 에러의 원인과 이유, 해결 방안을 정리해보자!
velog.io
✔️ 지금까지 한 일
⭐️ 필수
- 브로셔 준비
- 기술적 의사결정
- [ ] Intersection Observer (수빈)
- [ ] react-cookie (수빈)
- [ ] axios(instance) (수빈)
- [ ] styled-components (수빈)
- 주요 기술 (공통)
- [x] 무한스크롤
- [x] 소셜 로그인
- 기술적 의사결정
- Feature
- [x] 닉네임 변경 중복확인 로직 변경 (수빈)
- [x] url env 처리 후 테스트 (수빈)
- [x] cookie 모듈 닉네임 만료시간 수정 (수빈)
- UI (수빈)
- 크로스 브라우징
- [ ] 웹폰트 적용 문제
- 커뮤니티 페이지
- [x] 게시글 제목 내용 댓글 글자 수 제한 - css 깨진다는 유저 피드백
- 설정 모달
- [x] ver1 로그아웃 탭에서 모달 띄워서 변경
- [x] ver2 로그아웃 탭 안에서 변경
- 크로스 브라우징
- Refactoring (수빈)
- [x] 설정 모달 공통 컴포넌트로 분리
- [x] modules 폴더 안의 모듈 파일들 밖으로 빼고 폴더 삭제(api 폴더와 같이 통일)
- [x] 에러 해당 파일에 규칙 해제 → eslint 규칙으로 모두 추가 및 주석
- [x] jsx-props-no-spreading
- [x] prop-types
- [x] jsx-a11y/no-noninteractive-element-interactions
- [x] jsx-a11y/click-events-have-key-events
- [x] no-nested-ternary
- [x] label-has-associated-control
- [x] consistent-returnya
- [x] func-names
- [x] no-use-before-define
- [x] 닉네임 변경 컴포넌트 분리
- [x] feature 폴더 삭제하고 컴포넌트들 밖으로 빼기
- 렌더링 최적화
- [ ] 세션 녹화영상 보기 (수빈)
~ 필수 ⭐️
브로셔 넣은 내용들 준비하고 웹폰트 문제도 찾아보고 렌더링 세션 녹화본 보고 뭐 채택할 지 정해야 한다.
다음주 우선순위
- 에러
- [ ] acces token 재발급 확인
- 렌더링 최적화
- 리소스 줄이기(폰트, 이미지)
- 이미지(새로고침 등) → 폰트로 적용
- 코드
- lazy loading : Img 태그 loading 속성에 lazy주거나 IntersetctionObserver 사용 등
- UT 개선 사항
- [ ] 커뮤니티 버튼 드래그앤드롭하면 url 노출되는 오류 막기
- [ ] 게시글 검색 시 결과 없을 때 보여줄 컴포넌트
- [ ] 배경음악 추가
- 전체 UI 수정
- [ ] 랜딩 페이지, 게임룰 모달
- [ ] 로비 페이지, 설정 모달
- [ ] 게임방 페이지
- [ ] 커뮤니티 페이지
- [ ] 글 수정 및 삭제 페이지
- refactoring
- [ ] PostDetail 컴포넌트 index 를 map의 key값으로 쓰지 않는 방법으로 리팩토링
- [ ] ChatBox 컴포넌트 index 를 map의 key값으로 쓰지 않는 방법으로 리팩토링
- [ ] code convention 맞게 썼는지 전체 점검
- github readme, wiki 추가
- 주요 기능
- [ ] 주요 기능 리스트로 간단하게 한 줄씩
- 컴포넌트 정보
- [ ] 폴더 별 컴포넌트 정보 및 설명
- 일정
- [ ] 개발 주요 일정
- [ ] 개발 타임라인
- 트러블 슈팅
- [ ] 트러블 슈팅 항목별 코드
- 주요 기능
이거 말고도 할 게 많은데 최종 발표회까지 얼마 안 남았다니...
또 생각난 할 일들
- 실시간 채팅 트러블 슈팅에 추가
- 트러블 슈팅 내용들 중 수치화할 항목 고르고 데이터 추출
- 유저 피드백 다시 보고 개선사항들 추가
시간이 더 있었다면 도입했을 기술들
react query
react hook form
atomic design pattern
github actions - CI/CD
좋은 블로그 글들 야금야금 모으기
https://talkwithcode.tistory.com/86
javascript . 어떻게 무한 스크롤을 구현하시나요?
안녕하세요. 여러분은 무한 스크롤을 지금까지 어떤 식으로 구현하셨나요? 자바스크립트로는 다양한 방법으로 구현할 수 있습니다. 직접 구현하는 사람도 있고 라이브러리를 사용하는 사람도
talkwithcode.tistory.com
https://velog.io/@pjh1011409/ESLint-Prettier#-eslint--commit
ESLint & Prettier
error JSX not allowed in files with extension '.js' 2.error 'React' must be in scope when using JSX
velog.io
https://velog.io/@eunbinn/Axios-vs-Fetch
[번역] 입문자를 위한 Axios vs Fetch
Axios와 Fetch API에 대해 소개하고 비교하는 글입니다. 제목에서도 알 수 있듯이 설치방법 부터 간단한 성능 비교까지 기본적인 내용들을 다루고 있습니다.
velog.io
https://ssangq.netlify.app/posts/axios-and-fetch
Axios와 Fetch, 무엇을 사용할까? - Develop To be a Developer
Axios가 핫 하다던데 Axios를 사용하게 된 계기는 Hot 하다는 말 때문이었다. 내가 언젠가는 GET을 사용해 데이터를 받아오는 것 뿐만 아니라 직접 POST, PUT 메소드를 써가며 데이터를 저장, 변경하는
ssangq.netlify.app
https://doqtqu.tistory.com/338
[React.js] 상태 관리 라이브러리 비교 3 - Recoil
Recoil 호환성 및 단순함을 이유로 외부의 글로벌 상태관리 라이브러리보다는 React 자체에 내장된 상태 관리 기능을 사용하는 것이 좋으나 내장 상태 관리 기능은 다음과 같은 한계를 가진다. 컴
doqtqu.tistory.com
기술적 의사결정
Infinite Scroll
도입 이유 | 게시글 상세페이지에서 유저가 게시글에 초점을 맞춰 읽다가 댓글을 읽고 싶은 경우 일정한 데이터를 순차적으로 보여주기 위함. |
후보군 | Pagination 장점 : 유저의 의도에 맞게 원하는 페이지로 이동할 수 있다. 단점 : 다음 버튼을 클릭하는 추가적인 작업(액션)이 필요하다. Infinite Scroll 장점 : 유저가 다음 버튼을 클릭하고 기다리지 않아도 계속해서 데이터를 보여줄 수 있으므로 더 나은 유저 경험을 줄 수 있다. 단점 : 특정 데이터를 다시 찾기가 어렵다. → Infinite Scroll 구현 방법 1. 순수 JS로 scroll height를 계산 3. Intersection Observer API |
의견 조율 | scroll height 를 구해서 dabouncing과 throttling을 사용하는 경우 스크롤을 할 때마다 이벤트가 발생하므로 reflow 단계가 계속 일어남. Intersection Observer API 를 사용하는 경우 타겟의 변화를 관찰하여 스크롤시 지정된 수만큼 데이터가 요청되며 렌더링됨. 타겟이 얼마만큼 보였을 때 콜백함수를 실행할지 지정할 수 있다는 점도 장점임. |
의견 결정 | scroll이 일어날 때 마다 특정 element가 화면에 존재하는지에 대한 여부를 계속 계산하는 것은 비효율적이라고 판단하였음. 따라서 Intersection Observer API 를 사용함 |
부가 설명 | 서버와 미리 조율하여 db의 모든 댓글을 한번에 불러오는 것이 아니라 댓글을 보여줄 영역에 맞게 5개의 댓글만 먼저 로딩하고 target 컴포넌트가 화면에 보일 때 다음 5개 댓글을 로딩하도록 설정하였다. 데이터를 일부만 먼저 렌더링하고 차례대로 보여주므로 로딩 시간을 단축하였다. |
axios(instance)
도입 이유 | API를 연동할 때 axios를 사용하면 자동으로 JSON 데이터 형식으로 변환이 가능하고 XSRF의 보호를 받기 때문 |
후보군 | fetch 장점 : JavaScript 내장 라이브러리이므로 별도로 import할 필요가 없음 단점 : 네트워크 에러 발생 시 response timeout이 없어 기다려야 하고 axios에 비해 기능이 부족함 axios 장점 : fetch에는 없는 response timeout 처리 방법이 있음. 단점 : 사용하기 위해 모듈 설치가 필요함. |
의견 조율 | axios를 사용하는 경우 JSON 데이터를 자동 변환해줌. 또한 400, 500 대의 에러가 발생한 경우 rejectfh response를 전달해 catch로 잡아낼 수 있음. |
의견 결정 | axios 를 인스턴스화하여 baseURL 과 token을 사용하는 컴포넌트들에서 instance를 호출하여 사용할 수 있어 편리하므로 axios 를 사용하는 것으로 결정함. |
'Edu_hanghae99 > WIL' 카테고리의 다른 글
[WIL] 230129 (0) | 2023.01.29 |
---|---|
[WIL] 230122 꺾이지 않는 마음 (2) | 2023.01.23 |
[WIL] 230108 (0) | 2023.01.09 |
[WIL] 221225 (0) | 2022.12.25 |
[WIL] Axios (0) | 2022.12.18 |