javascript - 受控组件输入字段 onChange 行为

标签 javascript reactjs dom

我有一个受控组件,其输入 字段代表日期值。由于这一天值可以有 1-2 位数字,例如必须删除 12 才能输入 21。 由于 onChange react 事件的行为类似于 input DOM 事件,我只能删除或输入一位数字并且事件被触发,因此整个模型更新得太早在我删除一个数字后将日期设置为 1。

<input
     name={name}
     type="number"
     value={value}
     onChange={(e) => { onChange(e.target.value) } }
 />

感谢defaultValue change does not re-render input我可以使用带有 onBlur 事件的 uncontrolled component 输入来处理这个问题。使用 key 可确保在通过其他方式更改模型时发生新的渲染:

  <input
     name={name}
     type="number"
     defaultValue={value}
     key={value}
     onBlur={(e) => { onChange(e.target.value); }}
 />

但老实说,这感觉像是黑客攻击。您如何解决这种情况?我是否忽略了更简单的事情?您是否在更新模型(从而等待完整的用户输入)之前使用超时功能,也就是去抖动?

最佳答案

为什么不能同时使用 onChangeonBlur

class NumberChooser extends React.Component{
    constructor(props){
        super(props);
        this.state = {
            fieldValue: props.value,
            time: ''
        }
    }
    onChange(e){
        this.setState({fieldValue: e.target.value});
    }
    render(){
        return ( 
                <input
                    name={this.props.name}
                    type="number"
                    value={this.state.fieldValue} 
                    //key={value} not sure what do with this
                    onChange={this.onChange}
                    onBlur={(e) => this.props.onChange(e.target.value)}
                />
        );
    }
}
export default NumberChooser;

关于javascript - 受控组件输入字段 onChange 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45740000/

相关文章:

javascript - 作为参数传递的最长字符串的长度

css - Material-UI Typography 不在 AppBar 中心

javascript - 为什么 React 警告我不要将组件方法绑定(bind)到对象?

javascript - IE8 和 IE9 中的文档对象模型原型(prototype)

javascript - window.location.href、window.location.replace 和 window.location.assign 之间的区别

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?

javascript - 从 JavaScript 动态创建的表中删除行

javascript - 如何将链接的id传递给angularJS Controller ?

javascript - 编辑器错误 - 找不到这样的编辑器 : dateEditor in tabulator code

javascript - React-JS 如何在加载图片库之前显示预加载器图标?