자식 컴포넌트에서 inject() 사용하기
기본값을 지정한 inject(), 필수 주입, 네임스페이스를 위한 Symbol 키를 다룹니다.
자식 컴포넌트에서 inject() 사용하기은(는) CoddyKit의 무료 Vue Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Vue Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
inject 함수
inject는 같은 키를 기준으로 상위 컴포넌트가 제공한 값을 가져옵니다. <script setup>에서 호출하세요.
import { inject } from "vue";
const theme = inject("theme");반응성 유지하기
상위 컴포넌트가 ref를 제공했다면 주입된 값도 동일한 ref입니다. theme.value를 읽는 작업은 계속 반응형으로 유지되며 제공자가 값을 변경하면 업데이트됩니다.
const theme = inject("theme");
// in template: {{ theme }} (auto-unwrapped)기본값 제공하기
어떤 상위 컴포넌트도 키를 제공하지 않으면 inject는 undefined를 반환합니다. 두 번째 인수로 기본값을 전달하면 컴포넌트가 문제없이 대체 동작을 할 수 있습니다.
const theme = inject("theme", "light");
// "light" used when nothing was provided팩토리 기본값
객체이거나 생성 비용이 큰 기본값이라면 팩토리 함수를 전달하고 세 번째 인수를 true로 설정하세요. 그러면 필요할 때만 기본값이 생성됩니다.
const config = inject("config", () => ({ retries: 3 }), true);동작 주입하기
제공자가 함수도 제공했다면 같은 방식으로 주입한 뒤 호출하여 변경을 요청하세요. 상태 변경은 제공자가 담당합니다.
const updateName = inject("updateName");
updateName("Grace");저장소 객체 주입하기
제공자가 상태와 동작을 하나로 묶었다면 전체 객체를 주입하고 필요한 항목을 구조 분해 할당하세요.
const { user, updateName } = inject("userStore");TypeScript에서 타입 안전하게 주입하기
Vue는 주입을 타입 안전하게 만들 수 있도록 InjectionKey<T>를 제공합니다. 타입이 지정된 키를 사용하면 주입된 값의 형태가 정확히 무엇인지 TypeScript에 알려줄 수 있습니다.
import type { InjectionKey, Ref } from "vue";
export const themeKey: InjectionKey<Ref<string>> = Symbol("theme");타입이 지정된 키 사용하기
타입이 지정된 키로 제공하고 주입하세요. 이제 TypeScript가 값의 타입을 추론하고 불일치를 표시합니다.
provide(themeKey, theme); // theme: Ref<string>
const theme = inject(themeKey); // inferred Ref<string> | undefined고유성을 위한 심벌 키
키로 Symbol을 사용하면(대개 InjectionKey와 함께 사용) 큰 코드베이스에서 서로 관련 없는 제공자 간 문자열 충돌을 방지할 수 있습니다.
export const authKey = Symbol("auth") as InjectionKey<AuthService>;누락된 제공자 처리하기
엄격한 설정에서는 필수 주입이 누락되었을 때 오류를 발생시키는 것이 좋을 수 있습니다. 그러면 연결 구성을 조용히 undefined로 처리하는 대신 문제를 조기에 발견할 수 있습니다.
const auth = inject(authKey);
if (!auth) throw new Error("auth provider missing");하위 트리 어디서나 주입하기
어떤 상위 컴포넌트가 키를 제공하기만 하면 컴포넌트는 깊이에 관계없이 주입할 수 있습니다. 중간 컴포넌트는 그대로 두어도 되며, 이것이 provide/주입의 핵심입니다.
빠른 확인
제공자가 없을 때 inject("theme", "light")는 무엇을 반환합니까?
복습
inject(key)는 제공된 값을 읽으며 ref의 반응성도 유지한다는 것을 배웠습니다. 자연스러운 대체 동작을 위해 기본값이나 팩토리를 전달하고, 타입 안전하며 충돌이 없는 주입을 위해 InjectionKey<T>와 Symbol 키를 사용하세요.
자주 묻는 질문
“자식 컴포넌트에서 inject() 사용하기” 강의는 무료인가요?
네 — “자식 컴포넌트에서 inject() 사용하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Vue Academy 강의 전체를 잠금 해제할 수 있습니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“자식 컴포넌트에서 inject() 사용하기”에서 뭘 배우나요?
기본값을 지정한 inject(), 필수 주입, 네임스페이스를 위한 Symbol 키를 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Vue Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Vue Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Vue Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“자식 컴포넌트에서 inject() 사용하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Vue Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Vue Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Prop 전달 문제
- 부모 컴포넌트에서 provide() 사용하기
- 자식 컴포넌트에서 inject() 사용하기
- 앱 수준 상태를 위한 Provide/Inject