2016-09-24 92 views
1

我正在使用React-redux并创建一个数字类型字段。 event.target.value返回一个字符串,因为它是数字类型编辑器,它必须将数值作为数字返回,因此我将该值解析为数字。当我尝试输入4.5时出现问题。首先,当我输入4时,它会被解析为4(盯着数字)。但是当时输入数字4.得到解析为,所以我只是没有输入浮点值。无法解析“4.”到4

let onChangeText =(value)=> { fieldProps.onChange(parseFloat(value)); }

如果我在解析的onblur的值,那么它会工作,但状态管理我必须在的onChange工作。有没有什么办法解析4.字符串到4.号码。

+0

你看过去了吗? '+ parseFloat('4.5')。toFixed(2)' –

+2

为什么你认为“4”和“4” *作为数字*,可以以任何方式区分的不同事物? – hobbs

+0

@ hobbs听到! – DDS

回答

2

您可以将用户的文字输入存储在您的状态中,然后应用所需的逻辑并将结果单独存储在父元素的状态中?

这里是一个可能的方法:translating between cents and dollars in html input in React

+0

如果您键入'4',则不会。 handleInput将值4设置为数据。这就是我的情况 – shubham

+1

你的答案是绝对正确的,但html输入类型=数字给它没有工作。你应该尝试一下,但对于美元类型的符号,这是最好的。 – shubham

1

可以使用onBlur而不是onChange。这种方法的另一个好处是可以减少Redux操作的数量;而不是在每次按键时触发一个动作,当用户完成输入数据时触发一个动作。

这也将需要使用defaultValue而不是value将您的组件链接到数据。因此,组件将是这个样子:

<input type="number" defaultValue={this.props.value} onBlur={onChangeText} /> 

这意味着当你的用户完成打字输入和模糊输入元素的动作才会触发。

+0

我提到的问题是我必须使用onChange – shubham