이 기사에서는 사용자 정의 반응 데이터 검증 구성 요소가 무엇인지 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
프런트엔드 양식을 제출할 때 양식의 데이터를 확인하는 문제에 자주 직면합니다. 사용자가 제출한 데이터가 잘못된 형식, 숫자가 아닌 유형, 최대 길이 초과, 필수 필드, 최대 및 최소값 등 불법적인 경우 해당 위치에 신속한 정보를 제공해야 합니다. 사용자가 데이터를 수정하면 프롬프트 메시지도 숨겨집니다.
이 기능을 매우 편리하게 구현할 수 있는 기성 플러그인이 있습니다. 녹아웃 프레임워크를 사용하는 경우 Knockout-Validation 플러그인을 사용할 수 있습니다. 아래 코드와 같이 사용이 매우 간단합니다.
ko.validation.locale('zh-CN'); ko.validation.rules['money'] = { validator: function (val) { if (val === '') return true; return /^\d+(\.\d{1,2})?$/.test(val); }, message: '输入的金额不正确'}; ko.validation.rules['moneyNoZero'] = { validator: function (val) { if (val === '') return true; return isNaN(val) || val != 0; }, message: '输入的金额不能为0'}; ko.validation.registerExtenders();var model = { MSRP: ko.observable(0), price: ko.observable().extend({ required: true, number: true, min: 10000, money: true, moneyNoZero: true }), licence_service_fee: ko.observable().extend({ required: true, money: true }), purchase_tax: ko.observable().extend({ required: true, money: true }), vehicle_tax: ko.observable().extend({ required: true, money: true }), insurance: ko.observable().extend({ required: true, money: true }), commercial_insurance: ko.observable().extend({ required: true, money: true }), mortgage: ko.observable(''), interest_discount: ko.observable(''), allowance: ko.observable().extend({ money: true }), special_spec_fee_explain: ko.observable(''), has_extra_fee: ko.observable(false), is_new_energy: ko.observable(false) }; model.extra_fee_explain = ko.observable().extend({ required: { onlyIf: function () { return model.has_extra_fee() === true; } } }); model.extra_fee = ko.observable().extend({ required: { onlyIf: function () { return model.has_extra_fee() === true; } }, money: { onlyIf: function () { return model.has_extra_fee() === true; } } }); model.new_energy_allowance_explain = ko.observable().extend({ required: { onlyIf: function () { return model.is_new_energy() === true; } } }); model.total_price = ko.computed(function () { var _total = Number(model.price()) + Number(model.licence_service_fee()) +Number(model.purchase_tax()) + Number(model.vehicle_tax()) +Number(model.insurance()) + Number(model.commercial_insurance()); if (model.has_extra_fee()) { _total += Number(model.extra_fee()); } if (model.is_new_energy()) { _total -= Number(model.new_energy_allowance()); } return isNaN(_total) ? '0' : _total.toFixed(2).replace(/(\.0*$)|(0*$)/, ''); }); model.errors = ko.validation.group(model); ko.applyBindings(model);
더 많은 사용 방법을 보려면 github에서 설명서와 예제를 볼 수 있습니다.
그러나 우리의 프런트엔드가 React 프레임워크를 사용한다면 어떻게 위의 녹아웃과 유사한 기능을 구현할 수 있습니까? 상대적으로 독립적인 이 함수를 추출하여 React 구성 요소에 작성하는 것을 고려할 수 있습니다. 아래 코드를 보세요:
class ValidationInputs extends React.Component { constructor(props) { super(props); this.state = { isValid: true, required: this.props.required, number: this.props.number, min: this.props.min, max: this.props.max, money: this.props.money, data: null, errors: "" } } componentWillReceiveProps(nextProps) { var that = this; if (this.state.data !== nextProps.data) { return setStateQ({data: nextProps.data}, this).then(function () { return that.handleValidation(); }); } } handleValidation() { var fields = this.state.data; // required validation if(this.state.required && isNilOrEmpty(fields)){ return setStateQ({errors: '必须填写', isValid: false}, this); } // number validation if (this.state.number) { if (isNaN(fields)) { return setStateQ({errors: '请输入数字', isValid: false}, this); } if (!isNilOrEmpty(this.state.min) && !isNaN(this.state.min) && Number(this.state.min) > Number(fields)) { return setStateQ({errors: '输入值必须大于等于' + this.state.min, isValid: false}, this); } if (!isNilOrEmpty(this.state.max) && !isNaN(this.state.max) && Number(this.state.max) < Number(fields)) { return setStateQ({errors: '输入值必须小于等于' + this.state.max, isValid: false}, this); } } // money validation if (this.state.money) { if (fields.length > 0 && !/^\d+(\.\d{1,2})?$/.test(fields)) { return setStateQ({errors: '输入的金额不正确', isValid: false}, this); } } return setStateQ({errors: '', isValid: true}, this); } render() { return <span className="text-danger">{this.state.errors}</span> } }
이 구성 요소에서 지원하는 확인 항목은 다음과 같습니다:
required: true | false는 필드가 필수인지 확인합니다.
number: true | false 입력한 값이 숫자인지 확인합니다.
숫자가 true인 경우 최대값과 최소값은 최대값과 최소값을 통해 확인할 수 있습니다. 최대 및 최소 속성의 값은 모두 유효한 숫자여야 합니다.
money: true | false 입력된 값이 유효한 통화 형식인지 확인합니다. 통화 형식은 숫자여야 하며 소수점 이하 두 자리까지 허용됩니다.
사용 방법은?
상위 구성 요소의 render() 메서드에 구성 요소에 대한 참조를 추가합니다.
<p className="item"> <p className="col-xs-4">净车价:</p> <p className="col-xs-7"> <input type="text" className="form-control" placeholder="0" value={this.state.price} onChange={this.changePrice.bind(this)}/> <ValidationInputs ref="validation1" data={this.state.price} required="true" number="true" min="10000" max="99999999" money="true"/> </p> <p className="col-xs-1 text-center">元</p> <p className="clear"></p></p>
price 변수를 상위 구성 요소의 state을 실행하고 onChange 이벤트를 input 컨트롤에 바인딩하여 사용자가 텍스트 상자의 내용을 수정할 때 # 🎜 🎜#price변수 값은 ValidationInputs 구성 요소에 실시간으로 전달될 수 있습니다. 이러한 방식으로 ValidationInputs 구성 요소는 자체 handleValidation() 메서드를 즉시 사용하여 미리 설정된 규칙에 따라 들어오는 데이터를 확인하고 오류 메시지 표시 여부를 결정할 수 있습니다. .
여기에서ValidationInputs 구성 요소를 참조할 때 상위 구성 요소에서 쉽게 얻을 수 있도록 ref 속성을 설정합니다.# 🎜🎜#ValidationInputs구성 요소의 유효성 검사 결과(성공 또는 실패)입니다. 다음 방법을 사용하여 상위 구성 요소에서 판단할 수 있습니다(상위 구성 요소가 여러 ValidationInputs 구성 요소를 참조하고 각 참조가 서로 다른 ref#🎜🎜 #값을 갖는다고 가정). # 🎜🎜#// 父组件调用该方法来判断所有的输入项是否合法
checkInputs() {
for (var r in this.refs) {
var _ref = this.refs[r];
if (_ref instanceof ValidationInputs) {
if (!_ref.state.isValid) return false;
}
}
return true;
}
이런 방식으로 상위 구성 요소가 데이터를 제출하기 전에 이 방법을 사용하여 모든 데이터 항목이 검증을 통과하지 못한 경우 양식이 제출되지 않습니다.
위 내용은 js의 사용자 정의 반응 데이터 유효성 검사 구성 요소는 무엇입니까(자세한 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!