Skip to content
This repository was archived by the owner on Sep 4, 2024. It is now read-only.

Passing function as mask causes infinite loop when used with vee-validate #511

@zaalbarxx

Description

@zaalbarxx

V-Mask and Vue versions

2.2.4, 2.6.12

Reproduction Link

https://codesandbox.io/s/v-mask-demo-forked-ch575?file=/components/Input.vue

Steps to reproduce

  1. Open the link
  2. Observe the console, input events get continously emitted causing re-renders

What is Expected?

Adding function expression as mask should not trigger input events on every componentUpdated

What is actually happening?

I am not quite sure what exacly happens there, but I noticed that if I remove v-slot (scoped slot) from ValidationObserver then the problem disappears. Not sure why, but seems like v-mask componentUpdated triggers new input event on every component re-render which then gets listened by ValidationObserver which re-renders slotted content and v-mask again triggers input event causing a loop. Is there any specific reason why the componentUpdated method does not compare function results ? I mean this code.

var isMaskChanged = isFunction(value) || maskToString(oldValue) !== maskToString(value);

What is the purpose of marking the mask as changed if isFunction(value) ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions