Q
反應:輸入驗證
5
A
回答
3
我在最近陣營某些形式的工作,和我有一個非常類似的經歷。我認爲這是歸結爲React是非常新的,表單驗證是一個難以解決的難題。這導致了表單驗證的狂野西部,沒有設定標準,許多新庫試圖解決這個問題(每個都按照自己的方式進行並做出大量的假設)。
我結束了使用formsy反應的(https://github.com/christianalfoni/formsy-react),這是相當直接的,但做一個大假設 - 我們要驗證輸入onChange
。我想要我的輸入呈現錯誤onBlur
,這導致我編寫一些輔助函數來創建該行爲。
我還沒有深入Redux太多,但似乎有一些很好的選擇,在該領域(https://www.npmjs.com/package/redux-form),這可能適合您的需求。
讓我知道你是否想看到我的Formsy表單驗證器/幫手方法的例子。
希望這可以幫助,或者至少提供一些聲援,React世界中的驗證目前尚不清楚,缺乏標準。
2
我正在使用輕量級解決方案,並且它非常可定製。
在onChange
上驗證的輸入,但可在任何情況下更改。我們可以爲textarea創建類似的組件,複選框,收音機
var Input = React.createClass({
getInitialState: function(){
// we don't want to validate the input until the user starts typing
return {
validationStarted: false
};
},
prepareToValidate: function(){},
_debounce: function(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
},
componentWillMount: function(){
var startValidation = function(){
this.setState({
validationStarted: true
})
}.bind(this);
// if non-blank value: validate now
if (this.props.value) {
startValidation();
}
// wait until they start typing, and then stop
else {
this.prepareToValidate = _self._debounce(startValidation, 1000);
}
},
handleChange: function(e){
if (!this.state.validationStarted) {
this.prepareToValidate();
}
this.props.onChange && this.props.onChange(e);
},
render: function(){
var className = "";
if (this.state.validationStarted) {
className = (this.props.valid ? 'Valid' : 'Invalid');
}
return (
<input
{...this.props}
className={className}
onChange={this.handleChange} />
);
}
});
我們的組件,我們要渲染窗體。我們可以添加儘可能多的驗證規則,如想
var App = React.createClass({
getInitialState: function(){
return {email: ""};
},
handleChange: function(e){
this.setState({
email: e.target.value
})
},
validate: function(state){
return {
email: /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/.test(state.email)
}
},
render: function(){
var valid = this.validate(this.state);
return (
<div>
<Input valid={valid.email}
value={this.state.email}
onChange={this.handleChange}
placeholder="[email protected]"/>
</div>
);
}
});
這是非常簡單和可定製的,對於小項目工作非常好。但是如果我們的項目很大並且有很多不同的形式,那麼每次編寫帶處理程序的應用程序組件都不是最佳選擇
相關問題
- 1. DAO應該驗證輸入
- 2. Javascript反向驗證輸入代碼?
- 3. 反向驗證jQuery空輸入字段
- 4. 驗證輸入
- 5. 驗證輸入
- 6. 輸入驗證
- 7. 驗證輸入
- 8. 輸入驗證內部反應js組件
- 9. 反應驗證是否輸入了其中一個輸入字段
- 10. PHP輸入驗證
- 11. jQuery驗證輸入
- 12. 輸入驗證Silverlight
- 13. C++輸入驗證
- 14. cin.peek輸入驗證
- 15. Javascript輸入驗證
- 16. Settings.bundle,輸入驗證
- 17. JOptionPane輸入驗證
- 18. Python:輸入驗證
- 19. 輸入驗證angular2localization
- 20. 驗證EditText輸入
- 21. JavaScript輸入驗證
- 22. 驗證輸入C
- 23. 驗證負輸入
- 24. Python - 輸入驗證
- 25. PowerShell驗證輸入
- 26. 驗證輸入框
- 27. 多輸入驗證
- 28. optparse():輸入驗證
- 29. 輸入驗證WCF
- 30. Matlab - 輸入驗證