diff --git a/packages/core/src/Input.ts b/packages/core/src/Input.ts index 726d98f..ba543e4 100644 --- a/packages/core/src/Input.ts +++ b/packages/core/src/Input.ts @@ -25,6 +25,7 @@ export default class Input { constructor({ init, tracking }: InputOptions) { const handlersMap = new WeakMap(); + const descriptorMap = new WeakMap(); this.register = (element) => { if (!ALLOWED_TYPES.includes(element.type)) { @@ -72,6 +73,7 @@ export default class Input { // Поскольку значение элемента может быть изменено вне текущей логики, // нам важно перехватывать каждое изменение для обновления `tracker.value`. // `tracker.value` служит заменой `_valueTracker.getValue()` предоставляемый React. + descriptorMap.set(element, descriptor); Object.defineProperty(element, 'value', { ...descriptor, set: (value: string) => { @@ -240,6 +242,16 @@ export default class Input { }; this.unregister = (element) => { + const descriptor = descriptorMap.get(element); + + if (descriptor !== undefined) { + const { value } = element; + + Object.defineProperty(element, 'value', descriptor); + descriptorMap.delete(element); + element.value = value; + } + const handlers = handlersMap.get(element); if (handlers !== undefined) {