hooks로 변환하니 다음과 같은 에러가 납니다.
454
6 asked
제 생각에는 초기 배열이 빈배열이어서 length를 쓸 수 없어서 나는 에러 같은데 어떻게 해결해야 할지 모르겠습니다.

Answer 4
0
setTries((prevTries) => {
[
...prevTries,
{ try: value, result: `${strike}스트라이크 ${ball}볼입니다.` },
];
});
여기서 return을 안 하셨습니다.
setTries((prevTries) => {
return [
...prevTries,
{ try: value, result: `${strike}스트라이크 ${ball}볼입니다.` },
];
});
0
import React, { useState, useRef } from "react";
import Try_hooks from "./Try_hooks";
function getNumbers() {
// 숫자 4개를 겹치지 않고 랜덤하게 뽑는 함수
const candidate = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const array = [];
for (let i = 0; i < 4; i += 1) {
const chosen = candidate.splice(Math.floor(Math.random() * (9 - i)), 1)[0];
array.push(chosen);
}
return array;
}
const NumberBaseball = () => {
const [result, setResult] = useState("");
const [value, setValue] = useState("");
const [answer, setAnswer] = useState(getNumbers());
const [tries, setTries] = useState([]);
const onRefInput = useRef(null);
const onChangeInput = (e) => {
setValue(e.currentTarget.value);
};
const onSubmitForm = (e) => {
e.preventDefault();
if (value === answer.join("")) {
setResult("홈런!");
setTries((prevTries) => {
return [...prevTries, { try: value, result: "홈런!" }];
});
alert(`정답입니다! 정답은 ${answer.join("")} 입니다.`);
alert("게임을 다시 시작합니다.");
setValue("");
setAnswer(getNumbers());
setTries([]);
} else {
console.log(answer.join(""));
const answerArray = value.split("").map((v) => parseInt(v));
let strike = 0;
let ball = 0;
if (tries.length >= 9) {
// 10번 이상 틀렸을 때
setResult(`10번 이상 틀려서 실패! 정답은 ${answer.join("")} 입니다.`);
alert(`10번 이상 틀려서 실패! 정답은 ${answer.join("")} 입니다.`);
alert("게임을 다시 시작합니다.");
setValue("");
setAnswer(getNumbers());
setTries([]);
} else {
// 답 틀렸으면
for (let i = 0; i < 4; i += 1) {
if (answerArray[i] === answer[i]) {
strike += 1;
} else if (answer.includes(answerArray[i])) {
ball += 1;
}
}
setTries((prevTries) => {
[
...prevTries,
{ try: value, result: `${strike}스트라이크 ${ball}볼입니다.` },
];
});
setResult(`틀렸습니다. ${9-tries.length}번 남았습니다.`);
}
}
onRefInput.current.focus();
};
return (
<>
<h3>{result}</h3>
<form onSubmit={onSubmitForm}>
<input
type="number"
value={value}
onChange={onChangeInput}
maxLength={4}
ref={onRefInput}
/>
</form>
<div>시도: {tries.length}</div>
<ul>
{/* 반복되는 내용은 배열로 만들어서 map 함수로 반복한다. */}
{tries.map((item, index) => {
return (
// key로 index를 쓰면 나중에 성능 최적화 시 문제가 되므로 쓰지 않는다.
// 컴포넌트로 분리(큰 컴포넌트로 부터 작은 컴포넌트를 분리하는 탑다운 방식), props로 값 전달
<Try_hooks key={item + index} value={item} index={index} />
);
})}
</ul>
</>
);
};
export default NumberBaseball;
npm run dev 실행 시 포트가 안뜨는 문제
0
204
2
timeouts.current를 useEffect 의 input값으로 넣었을때
0
87
2
렌더링 테스트 코드 (Hooks)
0
80
1
Cannot find package 'react-refesh' 이런 에러 뜨시는 분들 보세요.
0
149
1
해당 에러 뜨는 분들 보세요. "Uncaught TypeError: ReactDom.createRoot is not a function"
1
191
1
강사님 레포지토리에서 코드 복사 시 master 브랜치 말고 react18 브랜치꺼 복붙하세요ㅠㅠ
0
95
1
useMemo와 useCallback 사용 시기
0
207
2
onRightClickTd가 작동을 하지 않습니다.
0
226
1
action.type 불러오는 방식
0
222
2
onClickRedo 질문
0
172
1
const Try = require(./Try) 빨간줄
0
248
1
npx webpack 실행시
0
313
1
지뢰찾기 강좌에서 빈칸들 한번에 열기 파트에서 여쭤보고싶은부분이 있어서 글 올립니다.
0
235
1
강좌에서 다루지 않은 기능들은 어떻게 학습하면 좋을까요?
0
311
1
react devtool이 enable 않됩니다.
0
531
2
React 랜더링이 되지 않습니다.
0
412
2
비동기로 동작하는 setState에 대해서
0
331
1
npm run dev 할 때 에러발생
0
480
2
memo, PureComponenet, shouldComponentUpdate 관련 질문
0
206
1
devMiddleware의 필요성
0
352
1
리액트에서 화살표 함수를 사용해야하는 이유
0
935
2
path.join관련질문
0
282
2
2-9. 웹팩 데브 서버와 핫 리로딩 설치과정 시 에러
0
374
1
next.js 에서 이와 비슷한 예제를 돌리고있는데 react랑 달라서 질문 드립니
1
491
4

