2016-09-24 125 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