composition api보면 라이프사이클 메소드
리액트같은경우 내부캐시로 랜더링 될 때 마다 등록하는것같은데
Vue같은경우 그런 형식이 아니라 Reactivity 개념으로 가더라고
그럼 궁금한게 setup이랑 lifecycle 훅 내에서 컴포넌트 인스턴스 접근이 가능하다는건데..
setup() {
onMount(() => {
});
}
onMount내부의 콜백함수가 아니라 onMount라는 함수 자체도 그럼 컴포넌트 인스턴스의 존재를 알아야지 mount될때 같이 껴들어갈거아님?
근데 onMount는 순수 js함수이고 bind(this)같은것도 안붙어있는데 어떻게 가능한거지?
getCurrentInstance()라는것으로 얻어오는것같은데..
어케가능한건지 모르겠음.. 혹시 아는분?
누가 그 개념을 가지고 쉽게 구현해놓은게있구만... 역시 오픈소스 세상..만세
optionMergeStrategies 이거 이용해서 현재 vue instance의 hook에 콜백 끼워넣는 것 같아
https://dev.to/getjv/modifying-hook-methods-with-optionmergestrategies-1h5l
이렇게 말이지
optionMergeStrategies를 사용하는 곳은
https://git.io/JX19G
여기라구 판단되구...
내가 궁금한건 injecthooks부분이 아니라 어떻게 getCurrentInstance를 setup()내부에서 얻는가에 대한 궁금증이었어
님이 준 코드에서는 "createLifeCycle"
createLifecyle의 리턴값은 그냥 함수이고, 저걸 그냥 setup()에서 실행하는것만으로도 라이프사이클에 착 붙어서 수행된다? 어떻게든 instance를 얻어오면 해당 lifecylce메소드 hook수행시에 가능할것같기도한데
그런 트릭을 어떻게 만드는지 궁금해서
아하 그랫구나
아이디어는 매우 간단하구나.. 그냥 currentInstance를 물어놓을 전역 싱글톤 변수 하나 만들어놓고, setup() 콜하기 바로 직전에 currentInstance를 setup 부르는 instance로 설정. setup 내부에서는 저 전역 싱글톤 변수에 접근하는 공용함수 만들어놓는것...
js는 싱글스레이기도하고, vue setup은 어처피 딱 한번만 불릴테니까.. 이런 가정들이 저런 구현을 만들수도있겠네..
setup 시작 직전 -> setup call 이후 // 이 사이에 다른 프로세스가 껴들 여지가 없을테니까..