From d00d94b6ba6930ba2d8b48fa4ef5563e7d097f6a Mon Sep 17 00:00:00 2001 From: Leonardo Date: Sun, 27 Sep 2020 00:26:24 -0300 Subject: [PATCH 1/2] Add compatibility with Context API --- src/react.js | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/react.js b/src/react.js index 2485c7f..84f99a0 100644 --- a/src/react.js +++ b/src/react.js @@ -1,7 +1,30 @@ -import {watch, reactive, toRefs, shallowRef, onUpdated, onMounted, onBeforeUnmount, isRef, isReactive} from 'vue'; +import {watch, reactive, toRefs, shallowRef, onUpdated, onMounted, onBeforeUnmount, isRef, isReactive, defineComponent, toRef, provide, inject, unref} from 'vue'; + +function _createProviderComponent (token) { + return defineComponent({ + props: ['value'], + setup (props, { slots }) { + provide(token, toRef(props, 'value')) + return () => slots.default() + }, + }) +} -export function createContext() { - return {} +function _createConsumerComponent (token, defaultValue) { + return (props, { slots }) => { + const injection = unref(inject(token, defaultValue)) + return slots.default(injection) + } +} + +export function createContext(defaultValue) { + const token = Symbol() + return { + _defaultValue: defaultValue, + _token: token, + Provider: _createProviderComponent(token), + Consumer: _createConsumerComponent(token, defaultValue) + } } export function forwardRef() { @@ -187,8 +210,7 @@ export function useRef(initialValue) { } export function useContext(context) { - // TODO - context; + return unref(inject(context._token, context._defaultValue)) } export function useCallback(cb, deps) { From cb20b7cca7243c155c0eccd379934e737513d331 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Sun, 27 Sep 2020 00:58:51 -0300 Subject: [PATCH 2/2] Formatting fixes --- src/react.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/react.js b/src/react.js index 84f99a0..322ad5f 100644 --- a/src/react.js +++ b/src/react.js @@ -4,27 +4,27 @@ function _createProviderComponent (token) { return defineComponent({ props: ['value'], setup (props, { slots }) { - provide(token, toRef(props, 'value')) - return () => slots.default() + provide(token, toRef(props, 'value')); + return () => slots.default(); }, - }) + }); } function _createConsumerComponent (token, defaultValue) { return (props, { slots }) => { - const injection = unref(inject(token, defaultValue)) - return slots.default(injection) - } + const injection = unref(inject(token, defaultValue)); + return slots.default(injection); + }; } export function createContext(defaultValue) { - const token = Symbol() + const token = Symbol(); return { _defaultValue: defaultValue, _token: token, Provider: _createProviderComponent(token), Consumer: _createConsumerComponent(token, defaultValue) - } + }; } export function forwardRef() { @@ -210,7 +210,7 @@ export function useRef(initialValue) { } export function useContext(context) { - return unref(inject(context._token, context._defaultValue)) + return unref(inject(context._token, context._defaultValue)); } export function useCallback(cb, deps) {