一、前言
最近項目中,發現了一個奇怪的現象:
<Input/>組件(ant中的)的placeholder 有時候會顯示,有的時候卻不顯示。
正常情況下,只要 <Input/>組件沒有value就會顯示placeholder的內容,可這次input明明沒有值的呀,這是怎麼回事?
二、placeholder遇到initialValue
2.1問題描述
項目環境:pro4 (ant組件(3.25.3)+ts+……);
組件使用環境:Form表單中使用<Input/>
產生問題:
有的時候即使<Input/>組件沒有value,也不顯示placeholder設置的內容
2.2問題排查
項目中不害怕出現bug,怕的是這個bug時而出現,時而不出現。怎麼辦呢?能怎麼辦,控制檯輸出對應<Input/>的值唄。然後發現:
當後端返回的字段爲null時,<Input/>的placeholder不顯示;而如果是返回的是undefined(空對象,取不到對應的值會是undefined)時,<Input/>的placeholder正常顯示。
這就很尷尬了,難道當取不到值時,應該設置爲undefined的?於是代碼變成如下:
initialValue: everyRuleDetail.calculateTypeId || undefined,
然後就解決問題了。
當然,爲了確認,我又將代碼改成
initialValue: everyRuleDetail.calculateTypeId || null
發現,無論何時,placeholder都不生效
2.3問題結論
在Form組件中,當placeholder遇到initialValue:如果initialValue的值不存在,建議設置爲undefined,此時placeholder才能正常發揮作用(當然,如果沒有用placeholder,那隨意咯)
2.4問題遺留
爲了讓結論更準確,我決定去官網試試,結果codeopen打開後,給同一個Form下的兩個不同<Input/>組件設置不一樣的initialValue(undefined和null),結果placeholder正常顯示。這!打臉來的太快,比龍捲風還快!於是,又回到了項目中,試了一下,還是發現當爲null時,placeholder不生效,而爲undefined時,正常!這……
2.5那先這樣好吧
如果實際開發中遇到placeholder不生效的情況,可以將其對應的nitialValue設置爲undefined試試