UNPKG

@pansy/react-mapbox-gl

Version:

🌍 基于 Mapbox GL 封装的 React 组件库

76 lines (74 loc) 2.58 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/hooks/usePropsReactive.ts var usePropsReactive_exports = {}; __export(usePropsReactive_exports, { usePropsReactive: () => usePropsReactive }); module.exports = __toCommonJS(usePropsReactive_exports); var import_core = require("@rcuse/core"); var import_toCapitalString = require("../utils/toCapitalString"); function usePropsReactive(props, ins, { setterMap = {}, converterMap = {} } = {}) { const prevProps = (0, import_core.usePrevious)(props); (0, import_core.useDeepCompareEffect)(() => { if (ins) { reactivePropChange(props, true); } }, [props]); (0, import_core.useUnmount)(() => { if (ins && "remove" in ins) { ins.remove(); } }); const onInstanceCreated = () => { reactivePropChange(props, false); }; const reactivePropChange = (nextProps, shouldDetectChange = true) => { if (!ins) return; try { Object.keys(nextProps).forEach((key) => { if ((0, import_core.isFunction)(props[key]) && /^on[A-Z]/.test(key)) return; let willReactive = true; if (shouldDetectChange) { willReactive = !(0, import_core.isEqual)(nextProps[key], prevProps == null ? void 0 : prevProps[key]); } if (!willReactive) return; let setterParam = nextProps[key]; if (key in converterMap) { setterParam = converterMap[key](nextProps[key]); } if (key in setterMap) { setterMap[key](setterParam, ins); } else { const trySetterName = `set${(0, import_toCapitalString.toCapitalString)(key)}`; if (trySetterName in ins) { ins[trySetterName](setterParam); } } }); } catch (error) { console.error(error); } }; return { onInstanceCreated }; }