Skip to content

Reactivity ​

The previous pages describe working with forms, getting and setting values, and working with accessibility. With regards to reactivity and interaction with Vue is described in this article.

Reactive values ​

Use the useFormValues() hook to get a reactive form object. The hook takes a single parameter an instance of the Form class:

ts
import {Form, useFormValues} from "jenesius-vue-form";

const form = new Form();
const values = useFormValues(form); // Reactive value object
import {Form, useFormValues} from "jenesius-vue-form";

const form = new Form();
const values = useFormValues(form); // Reactive value object

Reactive fields ​

If you need to keep track of a named form field, use ComputedValue. By default, this the function takes two objects: an instance of the Form class and a field name. However, the Form class can be omitted if you need to get the value from the parent form.

Options ​

form Optional ​

An instance of the Form class that keeps track of the form value.

name Required ​

The string name of the field.

Return value ​

The function will return Ref<any>.

Examples ​

Reactive form value ​

In this example, we directly pass the form from which we will receive the value.

ts
import {Form, ComputedValue} from "jenesius-vue-form";

const form = new Form();
const nameValue = ComputedValue(form, 'name');
import {Form, ComputedValue} from "jenesius-vue-form";

const form = new Form();
const nameValue = ComputedValue(form, 'name');

How not to work!

The following example shows how a calculated value will not work.

ts
const form = new Form()
const nameValue = ComputedValue('name'); // Error
const form = new Form()
const nameValue = ComputedValue('name'); // Error

In a child element ​

If we have a Form instance defined in the parent element, then we can omit it in the child element:

ts
// parent.vue
const form = new Form()

// child.vue
const ageValue = ComputedValue('age'); // Will work!
// parent.vue
const form = new Form()

// child.vue
const ageValue = ComputedValue('age'); // Will work!

Reactive state ​

To get the reactive form state (availability, change) you need to use useFormState and pass an instance of the form there.

ts
const form = new Form();
const state = useFormState(form); // { changed, disabled }
const form = new Form();
const state = useFormState(form); // { changed, disabled }

The reactive state has the following interface:

ts
interface FormReactiveState {
    changed: boolean,
    disabled: boolean
    wait: boolean
}
interface FormReactiveState {
    changed: boolean,
    disabled: boolean
    wait: boolean
}

Released under the MIT License.