|
1 |
| -# Options: Composition |
| 1 | +# 옵션: 컴포지션 {#options-composition} |
2 | 2 |
|
3 | 3 | ## provide
|
4 | 4 |
|
5 |
| -하위 컴포넌트에 주입할 수 있는 값을 제공합니다. |
| 5 | +하위 컴포넌트에 주입(Inject)할 수 있도록 값을 제공(Provide)합니다. |
6 | 6 |
|
7 | 7 | - **타입**:
|
8 | 8 |
|
|
14 | 14 |
|
15 | 15 | - **세부 사항**:
|
16 | 16 |
|
17 |
| - `provide` 와 [`inject`](#inject) 는 동일한 상위 체인에 있는 컴포넌트 계층 구조의 깊이에 관계없이 모든 하위 컴포넌트에 대한 의존성 주입기 역할을 할 수 있도록 사용됩니다. |
| 17 | + 부모 컴포넌트가 값을 제공하면, |
| 18 | + 컴포넌트 계층 구조의 깊이와 관계없이 모든 자식 컴포넌트에서 선택적으로 종속성을 주입받을 수 있도록, |
| 19 | + `provide`와 [`inject`](#inject)는 함께 사용됩니다. |
18 | 20 |
|
19 |
| - `provide` 옵션은 객체 또는 객체를 반환하는 함수여야 합니다. 이 객체에는 하위 컴포넌트에 주입할 수 있는 속성이 포함되어 있습니다. 이 객체에는 Symbol을 키값으로 사용할 수 있습니다. |
| 21 | + `provide` 옵션은 객체이거나 객체를 반환하는 함수여야 합니다. |
| 22 | + 이 객체는 자식 컴포넌트에 주입할 수 있는 속성으로 구성되며, |
| 23 | + 심볼(Symbol)을 키로 사용할 수 있습니다. |
20 | 24 |
|
21 | 25 | - **예제**:
|
22 | 26 |
|
|
33 | 37 | }
|
34 | 38 | ```
|
35 | 39 |
|
36 |
| - 함수를 사용하여 컴포넌트별 상태 제공: |
| 40 | + 함수 사용법: |
37 | 41 |
|
38 | 42 | ```js
|
39 | 43 | export default {
|
|
50 | 54 | }
|
51 | 55 | ```
|
52 | 56 |
|
53 |
| - 위 예시에서 제공된 `msg` 반응형(reactive)이 아닙니다. 자세한 내용은 [Working with Reactivity](/guide/components/provide-inject.html#working-with-reactivity)을 참조하십시오. |
| 57 | + 위 예제에서 제공된 `msg`는 반응형이 아닙니다. |
| 58 | + 자세한 내용은 [반응형으로 만들기](/guide/components/provide-inject.html#working-with-reactivity)를 참고하십시오. |
54 | 59 |
|
55 | 60 | - **참고**: [Provide / Inject](/guide/components/provide-inject.html)
|
56 | 61 |
|
57 | 62 | ## inject
|
58 | 63 |
|
59 |
| -조상 제공자(Provider)로부터 속성을 찾아 현재 컴포넌트에 주입할 속성을 선언합니다. |
| 64 | +상위 컴포넌트 또는 [`app.provide()`](/api/application.html#app-provide)를 통해 앱에서 제공(Provide)된 값 중, |
| 65 | +주입(Inject)할 속성을 선언합니다. |
60 | 66 |
|
61 | 67 | - **타입**:
|
62 | 68 |
|
|
77 | 83 |
|
78 | 84 | - **세부 사항**:
|
79 | 85 |
|
80 |
| - `inject` 옵션은 다음 중 하나여야 합니다: |
| 86 | + `inject` 옵션은 다음 중 하나입니다: |
81 | 87 |
|
82 |
| - - 문자열 배열 또는 |
83 |
| - - 객체의 키가 로컬 바인딩 이름이고 값이 다음 중 하나여야 합니다: |
84 |
| - - 사용 가능한 주입에서 검색할 키(문자열 또는 심볼) 또는 |
85 |
| - - 객체: |
86 |
| - - `from` 속성은 사용 가능한 주입에서 검색할 키(문자열 또는 심볼)이며, |
87 |
| - - `default` 속성은 대체 값으로 사용됩니다. props 기본값과 유사하게 여러 컴포넌트 인스턴스 간의 값 공유를 피하기 위해 객체 유형에 팩토리 함수가 필요합니다. |
| 88 | + - 문자열로 이루어진 배열 |
| 89 | + - 객체의 키는 인스턴스에 바인딩 될 이름이고, 값은 다음 중 하나입니다: |
| 90 | + - 문자열 또는 심볼로 되어있는 주입 가능한 속성의 키. |
| 91 | + - 다음 속성 중 하나 이상으로 이루어진 객체: |
| 92 | + - `from`: 문자열 또는 심볼로 되어있는 주입 가능한 속성의 키. |
| 93 | + - `default`: 대체 값으로 사용되며, props의 `default`와 유사. |
| 94 | + 대체될 값이 객체 타입일 경우, |
| 95 | + 컴포넌트의 여러 인스턴스 간 값의 참조가 공유되는 것을 피하기 위해 팩토리 함수를 사용해야 함. |
88 | 96 |
|
89 |
| - 일치하는 속성이나 기본값이 제공되지 않은 경우 주입된 속성은 `undefined`가 됩니다. |
| 97 | + 일치하는 속성이나 기본값이 제공되지 않는 경우, 주입된 속성의 값은 `undefined`입니다. |
90 | 98 |
|
91 |
| - 주입된 바인딩은 반응형(reactive)이 아닙니다. 이것은 의도적입니다. 그러나 주입된 값이 반응형 객체인 경우 해당 객체의 속성은 반응형으로 유지됩니다. 자세한 내용은 [Working with Reactivity](/guide/components/provide-inject.html#working-with-reactivity)을 참조하세요. |
| 99 | + 주입되어 바인딩된 값은 반응형이 아니며, |
| 100 | + 이것은 의도적입니다. |
| 101 | + 그러나 주입된 값이 반응형 객체인 경우, |
| 102 | + 해당 객체의 속성은 반응형으로 유지됩니다. |
| 103 | + 자세한 내용은 [반응형으로 만들기](/guide/components/provide-inject.html#working-with-reactivity)를 참고하십시오. |
92 | 104 |
|
93 | 105 | - **예제**:
|
94 | 106 |
|
|
103 | 115 | }
|
104 | 116 | ```
|
105 | 117 |
|
106 |
| - prop의 기본값으로 주입된 값 사용하기: |
| 118 | + 주입된 값을 prop의 기본값으로 사용: |
107 | 119 |
|
108 | 120 | ```js
|
109 |
| - const Child = { |
| 121 | + export default { |
110 | 122 | inject: ['foo'],
|
111 | 123 | props: {
|
112 | 124 | bar: {
|
|
118 | 130 | }
|
119 | 131 | ```
|
120 | 132 |
|
121 |
| - 주입된 값을 데이터 입력으로 사용: |
| 133 | + 주입된 값을 데이터 입력값으로 사용: |
122 | 134 |
|
123 | 135 | ```js
|
124 |
| - const Child = { |
| 136 | + export default { |
125 | 137 | inject: ['foo'],
|
126 | 138 | data() {
|
127 | 139 | return {
|
|
130 | 142 | }
|
131 | 143 | }
|
132 | 144 | ```
|
133 |
| - |
134 |
| - 주입은 기본값 설정 옵션을 제공합니다: |
| 145 | + |
| 146 | + 주입될 값에 기본값을 설정한 옵션을 제공: |
135 | 147 |
|
136 | 148 | ```js
|
137 |
| - const Child = { |
| 149 | + export default { |
138 | 150 | inject: {
|
139 | 151 | foo: { default: 'foo' }
|
140 | 152 | }
|
141 | 153 | }
|
142 | 154 | ```
|
143 | 155 |
|
144 |
| - 다른 이름의 속성에서 주입해야 하는 경우 `from`을 사용하여 소스 속성을 나타냅니다: |
| 156 | + 주입할 속성의 이름을 다르게 해야 할 경우, |
| 157 | + `from`을 사용하여 주입할 속성 표기: |
145 | 158 |
|
146 | 159 | ```js
|
147 |
| - const Child = { |
| 160 | + export default { |
148 | 161 | inject: {
|
149 | 162 | foo: {
|
150 | 163 | from: 'bar',
|
|
154 | 167 | }
|
155 | 168 | ```
|
156 | 169 |
|
157 |
| - prop 기본값과 유사하게 레퍼런스 값에 대해 팩토리 함수를 사용해야 합니다: |
| 170 | + 팩토리 함수를 사용한 객체 타입의 기본값 지정: |
158 | 171 |
|
159 | 172 | ```js
|
160 |
| - const Child = { |
| 173 | + export default { |
161 | 174 | inject: {
|
162 | 175 | foo: {
|
163 | 176 | from: 'bar',
|
|
183 | 196 |
|
184 | 197 | - **세부 사항**:
|
185 | 198 |
|
186 |
| - `mixins` 옵션은 mixin 객체의 배열을 허용합니다. 이러한 믹스인 객체는 일반 인스턴스 객체와 같은 인스턴스 옵션을 포함할 수 있으며 특정 옵션 병합 논리를 사용하여 최종 옵션에 대해 병합됩니다. 예를 들어 믹스인에 `created` 훅이 있고 컴포넌트 자체에도 훅이 있는 경우 두 함수가 모두 호출됩니다. |
| 199 | + `mixins` 옵션은 믹스인 객체로 이루어진 배열입니다. |
| 200 | + 믹스인 객체는 일반 인스턴스 객체와 같은 옵션을 포함할 수 있으며, |
| 201 | + 특정 옵션 병합 로직을 사용하여 병합된 최종 옵션이 인스턴스에서 사용됩니다. |
| 202 | + 예를 들어 믹스인에 `created` 훅이 있고, 컴포넌트에도 훅이 있으면, |
| 203 | + 두 함수가 모두 호출됩니다. |
187 | 204 |
|
188 |
| - 믹스인 훅은 제공된 순서대로 호출되며 컴포넌트 자체 훅보다 먼저 호출됩니다. |
| 205 | + 믹스인 훅은 제공된 순서대로 호출되며, 컴포넌트 자체 훅보다 먼저 호출됩니다. |
189 | 206 |
|
190 |
| - :::warning 더 이상 권장되지 않습니다. |
191 |
| - Vue2 에서, 믹스인은 컴포넌트 로직의 재사용 가능한 청크를 생성하기 위한 기본 메커니즘이었습니다. 믹스인은 Vue3 에서 계속 지원되지만, [Composition API](/guide/reusability/composables.html) 를 활용하여 컴포넌트 코드 재사용하는 방식이 선호되고 권장하고 있습니다. |
| 207 | + :::warning 더 이상 권장되지 않음 |
| 208 | + Vue 2에서 믹스인은 컴포넌트 로직의 재사용 가능한 청크를 생성하기 위한 기본 메커니즘이었습니다. |
| 209 | + Vue 3에서 믹스인은 계속 지원되지만, |
| 210 | + 컴포넌트 간 코드 재사용을 위한 접근 방식으로 [컴포지션 API](/guide/reusability/composables.html)가 추천됩니다. |
192 | 211 | :::
|
193 | 212 |
|
194 | 213 | - **예제**:
|
|
200 | 219 | }
|
201 | 220 | }
|
202 | 221 |
|
203 |
| - createApp({ |
204 |
| - created() { |
205 |
| - console.log(2) |
206 |
| - }, |
207 |
| - mixins: [mixin] |
208 |
| - }) |
| 222 | + export default { |
| 223 | + createApp({ |
| 224 | + created() { |
| 225 | + console.log(2) |
| 226 | + }, |
| 227 | + mixins: [mixin] |
| 228 | + }) |
| 229 | + } |
209 | 230 |
|
210 | 231 | // => 1
|
211 | 232 | // => 2
|
212 | 233 | ```
|
213 | 234 |
|
214 | 235 | ## extends
|
215 | 236 |
|
216 |
| -확장할 "기본 클래스" 컴포넌트 입니다. |
| 237 | +현재 컴포넌트를 확장(extend)할 "클래스 기반" 컴포넌트입니다. |
217 | 238 |
|
218 | 239 | - **타입**:
|
219 | 240 |
|
|
225 | 246 |
|
226 | 247 | - **세부 사항**:
|
227 | 248 |
|
228 |
| - 한 컴포넌트가 다른 컴포넌트를 확장하여 해당 컴포넌트 옵션을 상속할 수 있습니다. |
| 249 | + B 컴포넌트 확장에 A 컴포넌트를 사용하면, A 컴포넌트의 옵션을 상속받을 수 있습니다. |
| 250 | + |
| 251 | + From an implementation perspective, `extends` is almost identical to `mixins`. The component specified by `extends` will be treated as though it were the first mixin. |
| 252 | + |
| 253 | + However, `extends` and `mixins` express different intents. The `mixins` option is primarily used to compose chunks of functionality, whereas `extends` is primarily concerned with inheritance. |
229 | 254 |
|
230 |
| - 구현의 관점에서 `extens`는 `mixins`와 거의 동일합니다. `extends`로 지정된 컴포넌트는 첫 번째 믹스인인 것처럼 처리됩니다. |
| 255 | + As with `mixins`, any options will be merged using the relevant merge strategy. |
231 | 256 |
|
232 |
| - 그러나, `extends`와 `mixins`는 다른 의도를 표현합니다. `mixins` 옵션은 주로 기능 덩어리를 구성하는 데 사용되는 반면, `extends`는 주로 상속과 관련이 있습니다. |
| 257 | + 구현의 관점에서 `extens`는 `mixins`와 거의 동일합니다. |
| 258 | + `extens`로 지정된 컴포넌트는 첫 번째 믹스인인 것처럼 처리됩니다. |
233 | 259 |
|
234 |
| - `mixins`와 마찬가지로 모든 옵션은 관련 병합 전략을 사용하여 병합됩니다. |
| 260 | + 그러나 `extens`와 `mixins`는 구현된 목적이 다릅니다. |
| 261 | + 주로 `mixins` 옵션은 기능 묶음을 구성하는데 사용되지만, |
| 262 | + `extens`는 상속과 관련됩니다. |
| 263 | + |
| 264 | + `mixins`와 마찬가지로 `extends`의 모든 옵션은 관련 병합 로직을 사용하여 병합됩니다. |
235 | 265 |
|
236 | 266 | - **예제**:
|
237 | 267 |
|
238 | 268 | ```js
|
239 |
| - const CompA = { ... } |
| 269 | + // CompB.vue 파일에서 |
| 270 | + |
| 271 | + import CompA from './CompA.vue' |
240 | 272 |
|
241 |
| - const CompB = { |
| 273 | + export default { |
| 274 | + // CompB 컴포넌트는 CompA에 정의된, |
| 275 | + // 옵션 속성들을 상속받음 |
242 | 276 | extends: CompA,
|
243 | 277 | ...
|
244 | 278 | }
|
|
0 commit comments