Vue를 사용한 React의 전역 상태!
7268 단어 reactvuejavascriptwebdev
최근 Vue 3가 출시되었습니다. Vue가 또 다른 프레임워크라는 것을 알고 있지만 Vue는 프레임워크에 얽매이지 않는 방식으로 반응성을 해결합니다. 즉, React를 포함한 모든 곳에서 반응성을 사용할 수 있습니다.
먼저 스토어 파일을 생성해 보겠습니다.
store.js
import { reactive } from 'vue'
const store = reactive({
count: 0
})
const increase = () => store.count++
export { store, increase }
Vue 구성 API가
reactive
를 제외하고 무엇을 할 수 있는지에 대한 개요를 보려면 overview here 을 얻을 수 있습니다.이제 store.js 파일에서 원하는 곳이면 어디든지 반응형
store
객체와 increase
메서드를 가져올 수 있습니다. 문제는 React 함수가 업데이트된 값을 렌더링하기 위해 함수를 언제 다시 실행할지 모른다는 것입니다. 이를 처리하기 위해 사용자 지정 후크를 만들 것입니다.useStore.js
import { useReducer, useEffect } from 'react'
import { watch } from 'vue'
function useStore(...stores) {
const [ignored, forceUpdate] = useReducer(x => x + 1, 0)
useEffect(() => {
const stopWatch = watch(stores, forceUpdate)
return stopWatch
}, [])
}
export default useStore;
useState
또는 useReducer
를 사용하여 update itself 구성 요소를 만들 수 있습니다. Vue Composition API로 매개변수stores
를 관찰하고 모든 변경 사항에 대해 호출forceUpdate
합니다. 또한 stopWatch
에서 useEffect
를 반환하여 구성 요소 마운트 해제 시 감시를 중지합니다. 모든 양의 상점이 우리의 useStore
에 전달될 수 있습니다.범프.js
import React from "react";
import { increase } from './store'
export default function Bump() {
return (
<button onClick={increase}>+1</button>
);
}
원한다면 여기에서 직접
store.count++
할 수도 있습니다.카운터.js
import React from "react";
import { store } from './store'
import useStore from './useStore'
export default function Counter() {
useStore(store)
return (
<p>{store.count}</p>
);
}
StackBlitz에 대한 완전한 예
후기
저는 실제로 이것이 전역 상태를 처리하는 훌륭하고 간단한 방법이라고 생각합니다. 추가 구성 요소, 전체 상태 개체의 축소, 발송 및/또는 완전한 재할당이 필요하지 않습니다. 이렇게 하면 깨끗한 방법으로 원하는 만큼의 글로벌 매장을 만들 수 있습니다.
전체 Vue를 가져오면 번들 크기가 더 커질 수 있습니다. 그러나 Vue의 반응성 모듈@vue/reactivity 및 @vue-reactivity/watch만 가져오거나 작은 번들에 대해 트리 쉐이킹에 의존할 수 있습니다.
이제 모든 개발자가 구성 요소 상태와 전역 상태를 처리하는 다른 방법을 원하는 것은 아니므로 동일한 프로젝트에서 React 방식과 Vue 방식이 혼동될 수 있습니다. 그러나 적어도 흥미롭고 재미있는 아이디어입니다.
Reference
이 문제에 관하여(Vue를 사용한 React의 전역 상태!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gautemeekolsen/global-state-in-react-with-vue-4n08텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)