Integrating with Inferno

This page will help you integrate FormValidation with the Inferno library. For the sake of simplicity, we are about to validate a simple login form with just two fields to input the username and password:
<form id="loginForm" method="POST">
<div class="form-group row">
<label class="col-sm-3 col-form-label">Username</label>
<div class="col-sm-4">
<input type="text" class="form-control" name="username" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label">Password</label>
<div class="col-sm-4">
<input type="password" class="form-control" name="password" />
</div>
</div>
<div class="form-group row">
<div class="col-sm-9 offset-sm-3">
<button type="submit" class="btn btn-primary">Login</button>
</div>
</div>
</form>

Bundling the library

First of all, you need to look at the following guide to see how we can bundle FormValidation with popular bundlers:

Creating a FormValidation instance

The best place to initialize a FormValidation instance is inside the component's componentDidMount event:
import formValidation from 'formvalidation/dist/es6/core/Core';
import { Component } from 'inferno';
class LoginForm extends Component {
render() {
return (
// Render the form ...
);
}
componentDidMount() {
// Create a FormValidation instance
this.fv = formValidation(document.getElementById('loginForm'), {
fields: {
username: {
validators: {
notEmpty: {
message: 'The username is required'
},
stringLength: {
min: 6,
max: 30,
message: 'The username must be more than 6 and less than 30 characters long',
},
regexp: {
regexp: /^[a-zA-Z0-9_]+$/,
message: 'The username can only consist of alphabetical, number and underscore',
},
}
},
password: {
validators: {
notEmpty: {
message: 'The password is required'
},
stringLength: {
min: 8,
message: 'The password must have at least 8 characters',
},
}
},
},
plugins: {
...
},
});
}
}

Using the plugins

In order to use the plugins, we need to import them:
import formValidation from 'formvalidation/dist/es6/core/Core';
// FormValidation plugins
import Icon from 'formvalidation/dist/es6/plugins/Icon';
import Trigger from 'formvalidation/dist/es6/plugins/Trigger';
import Bootstrap from 'formvalidation/dist/es6/plugins/Bootstrap';
import SubmitButton from 'formvalidation/dist/es6/plugins/SubmitButton';
class LoginForm extends Component {
componentDidMount() {
this.fv = formValidation(document.getElementById('loginForm'), {
fields: {
...
},
plugins: {
trigger: new Trigger(),
bootstrap: new Bootstrap(),
icon: new Icon({
valid: 'fa fa-check',
invalid: 'fa fa-times',
validating: 'fa fa-refresh'
}),
submitButton: new SubmitButton(),
},
});
}
}
Now the FormValidation instance is ready, you can listen on the events or call API:
// Listen on event
this.fv.on('core.field.invalid', (e) => {
...
});
// Call API
this.fv.revalidateField('...');

Registering validator

You don't need to follow this section if you are using a popular validator. The popular validator is ready when you import the FormValidation's core:
import formValidation from 'formvalidation/dist/es6/core/Core';
In the other cases, you have to use the registerValidator() method to let the library knows where it can find a special or custom validator:
// Import an external validator
import phone from 'formvalidation/dist/es6/validators/phone';
// Or import your own validator
import strongPassword from '/path/to/your/strongPassword';
class LoginForm extends Component {
componentDidMount() {
this.fv = formValidation(document.getElementById('loginForm'), {
fields: {
phoneNumber: {
validators: {
phone: { ... }
}
},
password: {
validators: {
checkPassword: { ... }
}
},
},
});
// Register validators
this.fv.registerValidator('phone', phone)
.registerValidator('checkPassword', strongPassword);
}
}

Destroying FormValidation instance

Inferno component triggers the componentWillUnmount event when it's removed from page or not used anymore. It's the time to destroy our FormValidation instance by using the destroy() method:
class LoginForm extends Component {
componentWillUnmount() {
if (this.fv) {
this.fv.destroy();
}
}
}

See also