인프런 커뮤니티 질문&답변
setAnswers 에 함수가 들어가도 괜찮은건가요?
작성
·
352
·
수정됨
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에 함수를 전달하여 상태 값을 갱신하는 것은 올바른 방법이에요.
이해에 도움이 되셨기를 바랍니다. 추가로 궁금한 점이 있으면 언제든지 물어보세요!





