createContext.js 597 B

123456789101112131415161718192021
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import { inject, provide, reactive, watchEffect } from 'vue';
  3. function createContext(defaultValue) {
  4. const contextKey = Symbol('contextKey');
  5. const useProvide = (props, newProps) => {
  6. const mergedProps = reactive({});
  7. provide(contextKey, mergedProps);
  8. watchEffect(() => {
  9. _extends(mergedProps, props, newProps || {});
  10. });
  11. return mergedProps;
  12. };
  13. const useInject = () => {
  14. return inject(contextKey, defaultValue) || {};
  15. };
  16. return {
  17. useProvide,
  18. useInject
  19. };
  20. }
  21. export default createContext;