>  기사  >  웹 프론트엔드  >  js의 사용자 정의 반응 데이터 유효성 검사 구성 요소는 무엇입니까(자세한 설명)

js의 사용자 정의 반응 데이터 유효성 검사 구성 요소는 무엇입니까(자세한 설명)

青灯夜游
青灯夜游앞으로
2018-10-18 17:53:512427검색

이 기사에서는 사용자 정의 반응 데이터 검증 구성 요소가 무엇인지 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

프런트엔드 양식을 제출할 때 양식의 데이터를 확인하는 문제에 자주 직면합니다. 사용자가 제출한 데이터가 잘못된 형식, 숫자가 아닌 유형, 최대 길이 초과, 필수 필드, 최대 및 최소값 등 불법적인 경우 해당 위치에 신속한 정보를 제공해야 합니다. 사용자가 데이터를 수정하면 프롬프트 메시지도 숨겨집니다.

이 기능을 매우 편리하게 구현할 수 있는 기성 플러그인이 있습니다. 녹아웃 프레임워크를 사용하는 경우 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: &#39;输入值必须小于等于&#39; + 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제