๐ ๋ชฉ์ฐจ
- Introduction
- What is Provide/Inject?
- Usage
- Reactice Usage
- Conclusion
- Reference
๐ Introduction
์๋
ํ์ธ์. ์ด๋ฒ ํฌ์คํ
์์๋ ์๋ก์ด provide/inject
์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ํด๋น ์ฝ๋๋ ์ฌ๊ธฐ์๋ณผ์ ์์ต๋๋ค.
๐ What is Provide/Inject?
๋ง์ฝ ์ด๋ฐ ์ํฉ์ด๋ผ๊ณ ๊ฐ์ ํด๋ณผ๊ฒ์.
์์์ ๋ถ๋ชจ์์ ๋ฌผ๋ก props
๋ก ์ ๋ฌ์ด ๊ฐ๋ฅํ๊ฒ ์ง๋ง ์ข๋ ๊น๋ํ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ฒ์ ์ ๋ฌํ ์ ์์๊น์?
๋ค ๊ทธ๊ฒ provide/inject
์
๋๋ค. ๐
๐ Basic Usage
์ปดํฌ๋ํธ ๊ตฌ์กฐ ์ ๋๋ค.
|_App -> provide โญ๏ธ
|_MyDiv1
|_MyDiv2
|_MyDiv3
|_InjectedPractice -> inject โญ๏ธ
// App.vue
import { provide } from 'vue';
import MyDiv1 from './components/MyDiv1';
export default {
name: 'App',
components: {
MyDiv1
},
setup() {
provide('location', 'North Pole'); // ์ฌ๊ธฐ์ provide๋ฅผ ํฉ๋๋ค.
}
};
// InjectedPractice.vue
import { inject } from 'vue';
export default {
setup() {
const userLocation = inject('location', 'The universe');
console.log(userLocation); // North Pole๋ก ์ฐํ๋๋ค.
return {
userLocation
};
}
};
์ด๋ ๊ฒ ํด์ค์ ์์ต๋๋ค.
๐ Reactice Usage
// App.vue
import { provide, ref } from 'vue';
import MyDiv1 from './components/MyDiv1';
export default {
name: 'App',
components: {
MyDiv1
},
setup() {
const location = ref('North Pole');
const updateLocation = () => {
location.value = 'South Pole';
};
provide('location', location); // reactice๋ก ๋ด๋ ค์ค์์์ต๋๋ค. โญ๏ธ
provide('updateLocation', updateLocation); // update ํจ์๋ ๊ฐ์ด ๋ด๋ ค์ค๊ฒ์. โญ๏ธ
}
};
// InjectedPractice.vue
import { inject } from 'vue';
export default {
setup() {
const userLocation = inject('location', 'The universe');
const userUpdateLocation = inject('updateLocation'); // userLocation์ด South Pole๋ก ๋ณ๊ฒฝ์ด ๋ฉ๋๋ค. โญ๏ธ
return {
userLocation,
userUpdateLocation
};
}
};
๐ Conclusion
์ด๋ ๊ฒ Vue3์์์ provide์ inject์ ๋ํด์ ์์๋ณด์์ต๋๋ค. ์ด๋ฐฉ๋ฒ์ผ๋ก ๊ฐ๋จํ ํ๋ก์ ํธ๋ค์ ๊ตณ์ด vuex๋ฅผ ์ฌ์ฉํด์ผํ ๊น? ๋ผ๋ ์๋ฌธ์ด ๋ญ๋๋ค. ์๋ง react์์์ context api์ useReducer์ ๊ฐ์ ๊ฐ๋ ์ผ๊ฒ์ผ๋ก ์ถ์ธก์ด ๋ฉ๋๋ค. ๊ทธ๋ผ ๋ค์ ํฌ์คํ ์์ ๋ง๋์~~
๐ Reference
'Vue Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vue3 - v model (0) | 2020.11.08 |
---|---|
Vue3 - teleport (0) | 2020.11.08 |
Vue3 - LifeCycle (0) | 2020.10.30 |
Vue3 - computed and watch (0) | 2020.10.28 |
Vue3 - Refs (0) | 2020.10.27 |