작성
·
248
·
수정됨
0
안녕하세요. 유익한 강의 감사합니다.
const useCurrentAnswer = () => {
const step = useStep();
const [answers, setAnswers] = useRecoilState(answersState);
const answer = answers[step];
const setAnswer = (newAnswer) => {
setAnswers((answers) => {
// 새로운 답변 렌더링 (answers 는 그냥 변수명 )
const newAnswers = [...answers]; // 기존 답변목록을 복붙함 (불변성의 법칙을 지켜라 / 기존 데이터는 건들지마..)
newAnswers[step] = newAnswer; // 새로 작성한 답변을 복붙한 배열에 넣어줌
return newAnswers; // 새로운 답변 목록 반환
});
};
return [answer, setAnswer];
};
에서
answer - String / 답변
answers - String[] / 답변 목록
setAnswer - answer를 렌더링해주기위한 함수 / setAnswer(param) { answer = param }
setAnswers - answers를 렌더링해주기위한 함수 / setAnswers(param) { answers = param }
로 이해되는데 그렇다면 setAnswers에 함수가 들어가도 괜찮은건지 궁금합니다.
setAnswers((answers) => {
const newAnswers = [...answers];
newAnswers[step] = newAnswer;
return newAnswers;
});
는 setAnswers(화살표함수) { answers = 화살표함수} 이고
answers는 화살표함수가 되는게 아닌가요?
answers는 함수가 되어 입력된값을 리턴해서 바로 answers에 할당되는건가요?
아니면
setAnswers에서 함수가 실행되어 리턴된 값이 answers에 할당되는 건가요??
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
setAnswers에 함수를 넣어도 괜찮습니다. React의 useState나 Recoil의 useRecoilState를 사용할 때, 상태 값을 갱신하는 함수를 파라미터로 전달할 수 있기 때문입니다. setAnswers((answers) => { … }) 부분에서 answers는 현재의 상태 값을 파라미터로 받아와서 새로운 값을 반환하는 함수입니다. 그리고 이 함수를 setAnswers에 전달하여 answers 상태 값을 갱신할 수 있도록 합니다.
즉, setAnswers((answers) => { … }) 부분이 실행되면 answers는 현재의 상태 값을 받아와서 함수 내에서 새로운 값을 계산하고 이 값을 반환하여 answers 상태를 갱신할 수 있게 됩니다. 따라서 setAnswers에 함수를 전달하여 상태 값을 갱신하는 것은 올바른 방법이에요.
이해에 도움이 되셨기를 바랍니다. 추가로 궁금한 점이 있으면 언제든지 물어보세요!