gpt4 book ai didi

javascript - 通过事件响应更改输入类型

转载 作者:行者123 更新时间:2023-11-30 09:48:33 25 4
gpt4 key购买 nike

我正在尝试扩展一个 React 输入组件,它需要输入密码,并且在它旁边的元素或元素发生特定事件后 - 它需要切换输入类型(type="text/password").

React 如何处理这个问题?

我有这个作为我的组件的类:

import { React, Component } from 'lib' 

export class PasswordInput extends Component {
constructor(props, context){
super(props, context)
const { type, validate, password } = this.props

if(context.onValidate && password) {
context.onValidate(password, validate)
}

if(context.showHide && password) {
context.onValidate(password, validate)
}
}

render() {
let inputType = 'password'

return (
<div className="form">
<label htmlFor="password">{ this.props.label }</label>
<input {...this.constructor.filterProps(this.props)} type={ inputType } />
{ this.props.touched && this.props.error && <div className="error">{ this.props.error }</div> }
<button onClick={ showHide() }>{ this.props.btnLabel }</button>
</div>
)
}

showHide(field) {
return function(event){
console.log(`state before is ${this.state}`)
}
}

// the meld is
// export function meld(...objects) {
// return Object.assign({}, ...objects)
// }

static filterProps(props) {
const result = meld(props)
delete(result.validate)
return result
}
}

PasswordInput.contextTypes = {
onValidate: React.PropTypes.func
}

编辑我已经编辑了渲染方法并添加了一个处理事件的函数,但我现在得到:

警告:setState(...):无法在现有状态转换期间更新(例如在 render 内)。渲染方法应该是 Prop 和状态的纯函数。

我的浏览器崩溃了。

.....

    render() {
return (
<div className="form__group">
<label htmlFor="password">{ this.props.label }</label>
<input {...this.constructor.filterProps(this.props)} type={ this.state.inputType } />
{ this.props.touched && this.props.error && <div className="form__message form__message_error">{ this.props.error }</div> }
<button onClick={ this.handleClick() }>{ this.props.btnLabel }</button>
</div>
)
}

handleClick(){
this.setState({ inputType: this.state.inputType === 'password' ? 'text' : 'password' })
}

.....

最佳答案

可以根据组件的状态来配置输入的类型,在某个事件上设置,例如:

<input {...this.constructor.filterProps(this.props)} type={ this.state.inputType } onChange={ event => this.onChange(event) } />

并实现onChange方法:

onChange(event) {
var length = event.currentTarget.value.length;
this.setState({ inputType: length < 5 ? 'text' : 'password' });
}

您可能必须绑定(bind) onChange功能。

关于javascript - 通过事件响应更改输入类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37674073/

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