Reactjs React引导中的Form.Control-type password始终呈现一个默认密码,我可以';移开
我正在做登录页面,我意识到我不能设置表单的默认值。控件类型密码输入Reactjs React引导中的Form.Control-type password始终呈现一个默认密码,我可以';移开,reactjs,forms,react-bootstrap,Reactjs,Forms,React Bootstrap,我正在做登录页面,我意识到我不能设置表单的默认值。控件类型密码输入 class Login extends Component { constructor(props) { super(props); this.state = { email: '', password: 'thisIsMyDefaultPassword', isLoading: false, redirectToReferrer: false };
class Login extends Component {
constructor(props) {
super(props);
this.state = {
email: '',
password: 'thisIsMyDefaultPassword',
isLoading: false,
redirectToReferrer: false
};
}
handleChange = name => event => {
let update = {};
update[`${name}`] = event.target.value;
this.setState(update);
}
handleFocus = () => {
this.setState({ password: '' });
}
handleSubmit = () => event => {
let data = {
email: this.state.email,
password: this.state.password
}
this.props.login(data)
}
componentDidUpdate(prevProps, prevState, snapshot) {
console.log('componentDidUpdate');
let { currentUser } = this.props;
console.log('currentUser ', currentUser, 'prevProps.currentUser ', prevProps.currentUser );
if (JSON.stringify(prevProps.currentUser) !== JSON.stringify(currentUser)) {
console.log('currentUser !=');
if (currentUser._id) {
this.setState({
redirectToReferrer: true
})
}
}
}
render() {
let { email, password , isLoading, redirectToReferrer } = this.state;
console.log('password when rendered', password);
if (redirectToReferrer) {
return <Redirect to={'/'} />;
}
return (
<div className="loginWrapper">
<div className="loginContainer">
<Form>
<Form.Group controlId="formGroupEmail">
<Form.Label>Email Address</Form.Label>
<Form.Control
type="email"
value={email}
onChange={this.handleChange('email')}
placeholder="Enter Email"
/>
</Form.Group>
<Form.Group controlId="formGroupPassword">
<Form.Label>Password</Form.Label>
<Form.Control
type="password"
defaultValue={this.state.password}
onFocus={this.handleFocus}
onChange={this.handleChange('password')}
placeholder="Password"
/>
</Form.Group>
</Form>
<Button
variant="primary"
size="lg"
disabled={isLoading}
onClick={this.handleSubmit()}
block
>
{isLoading ? 'Loading…' : 'LOGIN'}
</Button>
</div>
</div>
);
}
}
因此得出结论,类型密码的默认值不起作用?有两种类型的有值组件(文本字段、复选框等):
value
prop,并处理它的onChange
,以获取值并在将来的源中更新
this.setState({password:event.target.value})
/>
value
和defaultValue
。
在您的情况下,您必须删除
defaultValue
prop,因为您需要一个受控组件来保持其值。有两种类型的有值组件(文本字段、复选框等):
value
prop,并处理它的onChange
,以获取值并在将来的源中更新
this.setState({password:event.target.value})
/>
value
和defaultValue
。
在您的情况下,您必须删除
defaultValue
prop,因为您需要一个受控组件来保持其值。这里的值props太多,如果您删除它,您可以更改输入。
此外,您总是将字符串“password”作为值提供给onChange处理程序。这可能不是您想要做的,而是使用用户输入的实际密码
在渲染方法中:
<p>Current password: {this.state.password}</p>
<Form>
<Form.Group controlId="formGroupPassword">
<Form.Label>Password</Form.Label>
<Form.Control
type="password"
defaultValue={this.state.password}
onChange={this.handleChange('password')}
placeholder="Password"
/>
</Form.Group>
</Form>
示例:这里的值道具太多了,如果去掉它,可以更改输入。 此外,您总是将字符串“password”作为值提供给onChange处理程序。这可能不是您想要做的,而是使用用户输入的实际密码 在渲染方法中:
<p>Current password: {this.state.password}</p>
<Form>
<Form.Group controlId="formGroupPassword">
<Form.Label>Password</Form.Label>
<Form.Control
type="password"
defaultValue={this.state.password}
onChange={this.handleChange('password')}
placeholder="Password"
/>
</Form.Group>
</Form>
示例:您对
defaultValue
和value
具有相同的值,这似乎没有意义,因为如果value
具有值,则将呈现该值。尝试将defaultValue与另一个值匹配,或仅删除defaultValue
。
你的onChange有用吗?似乎不是。您是否实现了您的handleChange
?因为您使用的是受控输入。
试试这个:
handleChange = e => {
this.setState({
password: e.target.value
})
}
<Form>
<Form.Group controlId="formGroupPassword">
<Form.Label>Password</Form.Label>
<Form.Control
type="password"
value={password}
onChange={this.handleChange}
placeholder="Password"
/>
</Form.Group>
</Form>
handleChange=e=>{
这是我的国家({
密码:e.target.value
})
}
密码
对于defaultValue
和value
,您有相同的值,这似乎没有意义,因为如果value
有一个值,则该值将被呈现。尝试将defaultValue与另一个值匹配,或仅删除defaultValue
。
你的onChange有用吗?似乎不是。您是否实现了您的handleChange
?因为您使用的是受控输入。
试试这个:
handleChange = e => {
this.setState({
password: e.target.value
})
}
<Form>
<Form.Group controlId="formGroupPassword">
<Form.Label>Password</Form.Label>
<Form.Control
type="password"
value={password}
onChange={this.handleChange}
placeholder="Password"
/>
</Form.Group>
</Form>
handleChange=e=>{
这是我的国家({
密码:e.target.value
})
}
密码
我的更改确实有效,但我应该编辑我的代码,因为它不是我使用的。。嗯,我尝试了所有组合defaultValue/value/defaultValue和Valuemy,但我应该编辑我的代码,因为它不是我使用的。。嗯,我尝试了defaultValue/value/defaultValue和value this的所有组合。状态={email:'',密码:'',isLoading:false,redirectToReferrer:false};但渲染时仍有默认密码=[我分别尝试了所有组合,并同时尝试了这两种组合。请删除密码上的onFocus,然后重试!this.state={email:'',password:'',isLoading:false,redirectToReferrer:false};但呈现时仍有默认密码=[我分别尝试了所有组合,并同时尝试了所有组合。删除密码上的onFocus,然后重试!嘿,伙计,我的代码与你的代码完全相同,只是我在构造函数中声明了状态。我尝试了你的方法,只是在类中将状态声明为变量,但对我不起作用。这里有一个提示:尝试使用Console记录密码e、 这将帮助您了解问题所在。我将在handleChange函数(查看您是否在那里获得正确的值)和render函数中添加console.log。特别是我将只执行console.log(This.state)为了查看保存内容的位置。嗨,grenzbotin,我在render函数上做了一个控制台日志,它正确地显示了我在字段中输入的任何内容,尽管我声明了一个默认值作为状态密码,但bootstrap jsut会覆盖它。我将更新我在帖子中找到的日志。@grenzbotin在哪里覆盖?你能更新你的代码吗在第一篇文章中,我们知道哪一行在控制台中输出哪一条日志?我真的不明白你的问题是什么:因此,状态得到了正确的更新(你在日志中看到了)。但是接下来会发生什么,应该发生什么