seriesForm의 가격 입력 input의 값을 1000단위로 ','가 찍히도록 포맷팅되는 기능을 구현했다
1000단위로 ,를 찍으려면 뒤에서부터 숫자를 3개씩 세면서 ,를 찍어야한다
onChange가 될 때마다 input값을 가져와서 조건에 맞게 조작한 후 리턴해준다
// SeriesForm.jsx
export const formatPrice = input => {
const formatedValue = input
.split('')
.reverse()
.map((str, index) => (index > 0 && index % 3 === 0 ? `${str},` : str))
.reverse()
.join('');
return formatedValue;
};
// SeriesForm.jsx
<PayInput
width="50%"
type="text"
value={formatPrice(values.price)}
name="price"
onChange={handleChange}
min={0}
disabled={edit}
/>
const handleChange = e => {
const { name, value } = e.target;
if (name === 'price') {
const filteredValue = value.replace(/[^0-9]/g, '').replace(/(^0+)/g, '');
setValues({ ...values, [name]: filteredValue });
return;
}
setValues({ ...values, [name]: value });
};
백준에서 문제를 풀기 시작했다
string관련 문제를 3개 풀었다
쉬운 문제였지만 오랜만에 푸는 거라 어떤 함수를 써야하는지, 어떤 패턴의 로직을 써야하는지 알고있던 것도 기억이 잘 안났다
s.repeat(count)
문자열을 파라미터 값의 수만큼 반복해주는 함수Object.entries(obj)
[ [key, value] ...]Object.keys(obj)
[key...]Object.values(obj)
[value...]문제점
가만히 둘 때에는 스크롤 중간 지점이 인식이 잘 되는데,
직접 스크롤을 할 때에는 인식이 안되어 순환되지 않았다
해결책
순환 말고, 카드리스트 한덩이만 애니메이션 되면서 스크롤 끝에 도달하면 애니메이션 실행이 중단되도록 수정했다
스크롤로 앞으로 당기면 다시 애니메이션이 시작되긴 하지만 카드가 많아졌을 경우 스크롤 끝에 도달했을 때 가장 앞으로 가야할 경우 스크롤을 많이 해야해서 사용성이 안 좋을 것 같았다.
맨 뒤로가기, 맨 앞으로가기 버튼을 추가하기로 결정했다