인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

wldls317님의 프로필 이미지
wldls317

작성한 질문수

한 입 크기로 잘라먹는 Next.js(v15)

7.6) 클라이언트 컴포넌트에서의 서버액션

7.6 createReviewAction 서버 액션 컴포넌트에 state 값을 넘기는 것에 관한 질문입니다.

해결된 질문

작성

·

16

0

🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨

질문 하시기 전에 꼭 확인해주세요- 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다)
- 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다)
- 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢)

질문 하실때 꼭 확인하세요
- 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X)
- 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지)
- 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우)
- 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요

- 강의의 몇 분 몇 초 관련 질문인지 알려주세요!
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

7.6 createReviewAction 서버 액션 컴포넌트에 state 값을 넘기는 것에 관한 질문입니다.

강의 8분 35초 쯤에, state를 넘긴다고 하셨는데, 함수 내에서 사용하지 않는데 굳이 왜 넘기는 것인가요? 감사합니다.

답변 2

0

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

이는 React의 useActionState 훅의 내부 동작 때문에 그렇습니다.

useActionState는 dispatch 함수가 호출될 때, 액션 함수(ex. createReview 등 ...)를 호출하면서 인수로 현재의 State 값과 FormData를 전달합니다.

예시와 함께 다시 이야기 하자면, 다음 코드에서 dispatch 함수가 호출될 경우 useActionState가 자동으로 action 함수를 호출하면서 인수로 state와 formData를 넘겨준다는 말 입니다.

const [state, dispatch, pending] = useActionState(action, null)

그리고 이런 동작은 React의 내장 Hook인 useActionState의 동작이므로 우리가 직접 수정할 수 없습니다 ㅠㅠ 따라서 어쩔 수 없이 useActionState와 함께 서버액션을 사용할 때에는 첫번째 매개변수로 현재의 State 값을 전달받도록 설정 해 주셔야 합니다.

쉽게 딱 한문장으로 정리하자면 호출하는 쪽에서 그렇게 호출하기 때문이라고 할 수 있겠네요 😃

0

안녕하세요, 인프런 AI 인턴입니다. wldls317님.

강의 내용을 바탕으로 한 질문 주셔서 감사합니다. createReviewAction 컴포넌트에서 state를 넘기는 이유와 그 의미에 대해 궁금하셨군요.

일반적으로, 컴포넌트에 state를 넘기는 이유는 해당 state가 그 컴포넌트에서 사용되거나 영향을 미치기 때문입니다. 그러나, 경우에 따라서는 state 자체가 직접 사용되지 않더라도, 하위 컴포넌트가 외부 변화에 대응해야 하는 상황을 만들 수 있습니다. 여기에는 다음과 같은 이유가 있을 수 있습니다:

  1. Side Effect 관리: 특정한 state가 변경되면 서버 액션에서 부수적인 작업이 필요할 수 있습니다. 이 때 state가 변경 사항을 감지하는 트리거 역할을 할 수 있습니다.

  2. State Propagation: 상위 컴포넌트에서 하위 컴포넌트로 state를 전달하여 데이터 흐름을 따라가는 패턴을 유지하고, 이후 해당 state를 사용하거나 추적할 수 있습니다.

  3. 코드 확장성 및 유지보수: 비록 현재 함수 내에서 직접 사용되지 않더라도, 코드가 확장되어 나중에 해당 상태를 이용할 가능성이 있다면 미리 준비해 두는 것이 보다 유연한 코드를 작성하는 방법일 수 있습니다.

관련하여 자세한 설명과 답변을 보시고 싶다면 React에서 useCallback과 React.memo의 사용 기준을 참고해보시면 좋습니다. 이 질문은 상태와 props에 관한 최적화 및 그 사용 사례에 대해 다루고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

wldls317님의 프로필 이미지
wldls317

작성한 질문수

질문하기