Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
</Error не закрыли в последнем примереconst {
validate,
util: { when },
rules: { isBoolean, isEmail }
} = require('yeval');
const optedInForNewsletter = (value, data) => data.optedInForNewsletter === true;
validate(
// declare rules as first argument
{
optedInForNewsletter: isBoolean,
email: when(optedInForNewsletter, isEmail),
},
// pass data as second argument
{ optedInForNewsletter: true }
)
.then(errors => {
console.log(errors); // { email: 'Must be a valid email address' }
});
У нас в проектах мы сделали правило required_if
И пишем так:
{
optedInForNewsletter: {one_of: [1, 0]},
email: [{required_if: 'optedInForNewsletter'}, 'email'],
}import React, {Component} from 'react';
import Validation, {DisabledOnErrors, ValidationInput} from 'react-livr-validation';
const data = {
login: '',
email: ''
};
class App extends Component {
state = {
withEmail: false
};
toggleWithEmail = ({target: {checked}}) => {
this.setState({
withEmail: checked
})
};
render() {
const {withEmail} = this.state;
const schema = {
login: ['required', 'not_empty'],
email: withEmail ? ['required', 'not_empty', 'email'] : []
};
return (
<div>
<Validation
data={data}
schema={schema}
>
<form>
<ValidationInput name="login">
<input name="login"/>
</ValidationInput>
<ValidationInput name="email">
<input name="email" type="email"/>
</ValidationInput>
<div>
<label htmlFor="subscribe">subscribe</label>
<input
id="subscribe"
type="checkbox"
onChange={this.toggleWithEmail}
/>
</div>
<DisabledOnErrors>
<input type="submit"/>
</DisabledOnErrors>
</form>
</Validation>
</div>
);
}
}
Возможно будет тоже полезно. Для JavaScript, кроме основных правил, есть отдельный пакет с дополнительными правилами — https://www.npmjs.com/package/livr-extra-rules и он тоже zero dependencies :)
Валидация React компонентов с помощью Livr.js