Max*_*x T 3 javascript reactjs
我创建了这个方法来获取计算器输入的状态并检查它是否为空。我需要两件事的帮助:
目前我有一条错误消息,无论是否存在所有输入都会触发,我想要的是它分别验证每个输入并在每个输入下触发一个错误。我该怎么做,但仍然保持这个功能简洁?
constructor(props) {
super(props);
this.state = {
price: 0,
downP: 0,
term: 0,
interest: 0,
error: ''
};
}
handleValidation = () => {
const {
price,
downP,
loan,
interest,
} = this.state;
let error = '';
let formIsValid = true;
if(!price ||
!downP ||
!loan ||
!interest){
formIsValid = false;
error = "Input fields cannot be empty";
}
this.setState({error: error});
return formIsValid;
}
Run Code Online (Sandbox Code Playgroud)
然后这是错误信息
<span style={{color: "red"}}>{this.state.error}</span>
Run Code Online (Sandbox Code Playgroud)如果您想将错误消息分开,我建议您重新组织您的状态。
因此可扩展的解决方案(您可以通过将它们添加到状态来添加更多控件)可能如下所示:
class NumberControlsWithErrorMessage extends React.Component {
constructor(props) {
super(props);
this.state = {
inputs: [
{ name: 'price', value: 0, error: ''},
{ name: 'downP', value: 0, error: '' },
{ name: 'term', value: 0, error: '' },
{ name: 'interest', value: 0, error: '' }
]
};
}
handleInputChange = (idx, event) => {
const target = event.target;
const name = target.name;
let error = '';
if (isNaN(target.value)) {
error = `${name} field can only be number`
}
if (!target.value) {
error = `${name} field cannot be empty`
}
this.state.inputs[idx] = {
...this.state.inputs[idx],
value: target.value,
error
}
this.setState({
inputs: [...this.state.inputs]
});
}
render() {
return (
<form>
{this.state.inputs.map((input, idx) => (
<div>
<label htmlFor="">{input.name}</label>
<input type="text" value={input.value} onChange={(e) => this.handleInputChange(idx, e)}/>
{input.error && <span>{input.error}</span> }
</div>
))}
</form>
);
}
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您正在构建一个复杂的表单,您可能想尝试一些 React 表单解决方案,其中所有用于侦听事件、状态更新、验证的机制都已经为您处理。像reactive-mobx-form
| 归档时间: |
|
| 查看次数: |
31709 次 |
| 最近记录: |