gpt4 book ai didi

javascript - 带有表单字段验证的 React-Bootstrap Popover

转载 作者:行者123 更新时间:2023-11-29 21:50:24 26 4
gpt4 key购买 nike

我试图利用显示的示例代码 here为了有一个覆盖触发器,在我的表单组件的无效用户名字段正则表达式上显示一个弹出窗口。我得到了经典的 Cannot update during an existing state transition(例如在“render”中)。渲染方法应该是 Prop 和状态的纯函数。 尝试执行此代码时出错:

var UserField = React.createClass({
getInitialState: function() {
return {
value: ''
};
},

getValue: function() {
return this.refs.input.getValue();
},

validationState: function() {
let valueCode = this.state.value;
if (valueCode.length > 0) {
switch (valueCode.match(/^[A-Za-z0-9_-]+$/)) {
case null:
this.refs.userHint.show();
return 'warning';
break;

default:
this.refs.userHint.hide();
return '';
break;
}
}
},

handleChange: function() {
this.setState({
value: this.refs.input.getValue()
});
},

render: function() {
return (
<OverlayTrigger
ref="userHint"
trigger="manual"
placement="right"
overlay={<Popover title='Invalid Username Format'>
<strong>Warning!</strong> Valid user credentials only contain alphanumeric characters, as well as heifens and underscores.
</Popover>
}
>
<Input
type = 'text'
value = {this.state.value}
label = 'Username'
bsStyle = {this.validationState()}
ref = 'input'
groupClassName = 'input-group'
className = 'form-control'
onChange = {this.handleChange}
/>
</OverlayTrigger>
);
}
});

一如既往,非常感谢您对此提供的任何帮助。谢谢。

最佳答案

如果我正在开发这个,我会做不同的事情,Input 管理它自己的验证并通过它的状态公开它是否有效(可通过 refs 访问) .

在不改变你的方法的情况下,这应该会更好地工作,因为它不会触发父组件状态的变化,直到叠加层被显示或隐藏:

validationState: function() {
let valueCode = this.state.value;
if (valueCode.length > 0) {
switch (valueCode.match(/^[A-Za-z0-9_-]+$/)) {
case null:
return 'warning';
break;

default:
return '';
break;
}
}
},

handleChange: function() {
let valueCode = this.refs.input.getValue();

if (valueCode.length > 0) {
switch (valueCode.match(/^[A-Za-z0-9_-]+$/)) {
case null:
this.refs.userHint.show();
break;

default:
this.refs.userHint.hide();
break;
}
}
this.setState({
value: valueCode
});
},

关于javascript - 带有表单字段验证的 React-Bootstrap Popover,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29570386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com