1.useReducer는 React 16.8에서 새로 추가된 개념으로
React에 내장된 Hook API 중 하나로 redux와 유사한 느낌을 가지고 있다.
React에서는 useReducer의 dispatch 함수의 동일성을 리렌더링 시에도 보장하기 때문에
의존성배열에 state를 넣지 않고 useState의 대용으로 추천받는다.
redux처럼 reducer에서 state, action을 받아 처리하며
dispatch로 type과 payload를 전송해 구분한다.
이를 구조분해 할당으로 아래와 같이 state와 dispatch로 구분한 다음
[state, dispatch] = useReducer(reducer, initialState)
필요한 정보는 다시 객체형 구조분해 할당으로 받아올 수 있다.
const { people } = state;
const { job, age } = state.profile
2.화살표함수에서 객체 리터럴을 반환하기 위해서는 객체를 소괄호에 넣어야한다.
객체 표시를 위한 중괄호는 화살표함수에 혼동을 주기 때문인데
아래와 같은 예시가 있다.
매개 변수가 하나인 경우 괄호가 없어도 된다.
const arr = [1,2,3]
console.log(arr.map(el=>el)) // [1,2,3]
하지만 괄호를 넣을 경우 return이 필요하다.
console.log(arr.map(el=>{el})) // [undefined,undefined,undefined]
console.log(arr.map(el=>{return el})) // [1,2,3]
위에서 본 것 처럼 중괄호를 넣으면 scope를 표시한다고 생각하기 때문에
현재 중괄호가 나타내는 것은 객체라는 것을 알려주기 위해서는 소괄호"()"로 감싸줘야 한다.
console.log(arr.map(el=>{el})) // [undefined,undefined,undefined]
console.log(arr.map(el=>({el}))) // [{el:1}, {el:2}, {el:3}]
3.immer라는 라이브러리는 불변성을 신경쓸 필요 없이 직접적으로 값을 바꾸면
해당 값을 불변성을 고려해 수정해 주는 기능을 가지고 있다.
하지만 사용을 위한 기본 코드가 있기 때문에
3중 이상의 객체 또는 배열혼합인 경우에만 더 편리함을 느낄 수 있기 때문에
그렇게 깊은 데이터가 없는 프론트엔드 작업에서는 크게 고려되지 않을 것 같고
(API를 통해 params로 핸들링하는게 정상일 것 같다)
직접 처리하는 것에 비해 2~3배가량 느리며
react-native 및 구형 브라우저에서는 ES5로 적용되기 때문에
10~20배까지도 느려질 수 있다는 단점이 있다.
immer를 사용해야 하는 목적 자체가 코드 구현의 까다로움을 편하게 한다는 부분인데
성능적 저하를 가져오기 때문에 구조분해 할당 등을 더 연습하는 것이 좋을 것 같다.
(1).백준 15829 Hashing은 해시처리에 대한 문제였다.
a~z까지 1~26의 숫자를 부여한 다음 31이라는 계수를 정해 차별성을 두고
각 문자의 index를 승수로 만들어 대체된 숫자 * 계수^index로 계산해 모두 합한 다음
1234567891이라는 소수로 나머치 처리를 하는 방식이었다.
31을 제곱하는 문제였기 때문에 당연히 BigInt가 나와야 했고
BigInt를 사용하지 않기 위해 각 계산마다 mod값으로 나머지를 구해줬고
그 외에는 const, 변수명에 조금 더 신경쓴 것 외에는 간단한 문제였다.
const input =`5
abcde`.split('\n')
const coefficient = 31
const mod = 1234567891
let result = 0
const factorial = (num) => {
let multiplied = 1
for(let i = 1 ; i <= num ; i++){
multiplied = (multiplied * coefficient) % mod
}
return multiplied
}
for(let i = 0 ; i < input[1].length ; i++){
result = (result + (input[1][i].charCodeAt()-96) * factorial(i)) % mod
}
console.log(result)
'회고' 카테고리의 다른 글
[취업준비일지] - 115 (0) | 2023.02.12 |
---|---|
[취업준비일지] - 114 (0) | 2023.02.11 |
[취업준비일지] - 112 (0) | 2023.02.09 |
[취업준비일지] - 111 (0) | 2023.02.08 |
[취업준비일지] - 110 (0) | 2023.02.07 |