【发布时间】:2017-02-16 08:57:04
【问题描述】:
我遇到了非常奇怪的情况。如果未通过验证,我需要更改输入值:
if (!isValid) {
//if invalid set previous value
this.timeInput.value = previous value;
}
我使用的是masked input,但使用香草输入时的行为完全一样。
我的输入更新,就在下一次重新渲染之前被调用。 这是我的第一个问题 - 为什么? 好的,经过一些研究,我找到了解决方案 - 将键添加到输入中,正如所说的那样添加 -
<input key={Math.random()}/>
还有它的工作!但最奇怪的是,当我尝试将值从随机更改为我的 id 属性时,类似于 -
key={Number(this.props.id)}
它不起作用!为什么?一个区别只是我的 id 是整数(如3),但Math.random 返回类似0.21421214124 的东西。
组件:
handleTimeBoxBlur = (e) => {
const newTime = convertToSeconds(e.target.value)
//if nothing was changed
if (newTime === this.props.slide.seconds) {
return;
}
const isValid = this.props.checkValidation(this.props.slide.id, newTime)
if (!isValid) {
//if invalid set previous value
this.timeInput.value = formatSS(this.props.slide.seconds);
setTimeout(() => this.setState({isValid : true}), 6000) //remove field highlighting after 8 seconds
}
this.setState({isValid : isValid})
}
render() {
<input
key={Math.random()}
styleName={inputStyleName}
onBlur={this.handleTimeBoxBlur}
ref={ref => this.timeInput = ref}
defaultValue={formatSS(this.props.slide.seconds)} />
}
【问题讨论】:
-
你使用的是哪个 React 版本?
-
我正在使用 React 15.4.2
-
“它不起作用”是什么意思?你可以说得更详细点吗?究竟是什么不起作用?
-
输入正在更新,但在下一次
render()调用时返回他的值 -
你能发布组件的代码吗?代码太少很难理解
标签: javascript reactjs random react-jsx ref