2017-08-25 71 views
0

以下代码示例适用于text输入类型,但允许在使用number输入类型时输入类似0120012的输入。反应号码输入允许输入如012

console.log行始终运行并显示正确的值,并且使用React Developer Tools进行检查时,App状态也是正确的。只是受控输入没有被“控制”。

为什么会发生这种情况,以及在React中使用数字输入的推荐方式是什么?

class App extends Component { 
    constructor() { 
    super() 
    this.state = { 
     value: '', 
    } 
    } 

    handleChange = e => { 
    const value = e.target.value 
    const num = parseInt(value, 10) 
    console.log(num) 
    this.setState({ value: isNaN(num) ? '' : num }) 
    } 

    render() { 
    return (
     <div className="App"> 
     <input type="number" value={this.state.value} onChange={this.handleChange} /> 
     </div> 
    ) 
    } 
} 
+0

'0012'是一个数字。 –

+0

不是后parseInt(....,10) – zsero

+0

我认为它的工作,因为你期待,检查这[** fiddle **](https://jsfiddle.net/mayankshukla5031/08ecc97d/) –

回答

0

所以,你的控制输入为数字的模型绑定在你的状态,这是不被012和12之间变化 - 所以给人们留下原样。

相反,你可以做

render() { 
    const value = this.state.value.toString() 
    return <input type="number" value={value} onChange={this.handleChange} /> 
} 

字符串实际上会有所不同,它会正确地重新绘制,剥离0领先或者,你可以setState({ value: String(num) })

+1

不应该在01 - > 012之间改变值。同样的方式,它应该在0 - > 01之间变化。但它没有被更新。 – zsero

+0

https://jsfiddle.net/dimitar/f7xna33x/ - 它怎么没有改变? –

+0

它应该改变没有'.toString()',我相信。 – zsero