인프런 커뮤니티 질문&답변

junyoung.jeong님의 프로필 이미지
junyoung.jeong

작성한 질문수

실무 중심! FE 입문자를 위한 React

12-3. Recoil로 데이터 관리하기

setAnswers 에 함수가 들어가도 괜찮은건가요?

작성

·

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에 함수를 전달하여 상태 값을 갱신하는 것은 올바른 방법이에요.

이해에 도움이 되셨기를 바랍니다. 추가로 궁금한 점이 있으면 언제든지 물어보세요!

junyoung.jeong님의 프로필 이미지
junyoung.jeong

작성한 질문수

질문하기