antd-mobile
預設的是輸入框錯誤處理方式為在輸入框右側顯示錯誤圖示,點選圖示觸發繫結的onErrorClick
事件,這樣顯得不夠直觀,現想利用現有元件引數對其進行封裝,達到在右側不顯示錯誤圖示,將錯誤資訊顯示到輸入框下側。
官方文件元件地址
Antd Mobile Design --> InputItem
原元件效果
封裝後效果
具體變更及實現點(具體可以看下面的封裝程式碼,一看就明白)
-
props引數
-
onErrorClick
:原來繫結的是一個點選事件,為了可以不新增多餘的屬性,且充分利用該屬性(因為右側錯誤圖示不需要後,該事件便無效了
),現在變為傳入一個錯誤陣列
或者字串
,用於顯示錯誤提示資訊 -
tipStyle
:自定義錯誤提示語的樣式,可以不傳入,會使用封裝內預設的提示樣式,傳入則增加或覆蓋已有樣式 - 其它引數和官方文件一模一樣,文件上怎麼用就怎麼用
-
-
錯誤提示文字的顯示位置
- 目前封裝的是顯示位置和輸入框輸入部分對齊,其實實現方式是複用了
InputItem
的元件樣式
- 目前封裝的是顯示位置和輸入框輸入部分對齊,其實實現方式是複用了
注意元件內使用InputItem
時將error={false}
放在後面,這樣就能避免顯示出右側的錯誤圖示,原理不用多說大家應該也懂的^_^ ^_^
完整程式碼
import React, { Component } from 'react';
import { InputItem } from 'antd-mobile';
const cls = 'trust-mobile-input';
class MobileInputItem extends Component {
render() {
const {type = 'text', labelNumber = 5, error = false, children = '', onErrorClick = '', tipStyle = {}, ...other} = this.props;
const errorTipStyle = {
color: '#f5222d',
padding: '5px 0px',
textAlign: 'left',
position: 'relative',
fontSize: 12,
...tipStyle
}
return (
<div className={cls}>
<InputItem type={type} {...other} error={false}>{children}</InputItem>
{
error &&
<div className="am-list-item" style={{height: 'auto', minHeight: 0}}>
{
children && <div className={`am-input-label am-input-label-${labelNumber}`}></div>
}
<div className="am-input-control">
<div style={{...errorTipStyle}}>
{onErrorClick}
</div>
</div>
</div>
}
</div>
)
}
}
export default MobileInputItem;
引入使用時注意事項
結尾寄語
- 本封裝更多的是提供一種另類錯誤提示方式的實現方法,大家可以各抒己見進行更多細節的封裝,例如
錯誤的顯示隱藏過渡效果
,錯誤時輸入框文字顏色
等等 - 不懂或不足之處,歡迎留言互相探討學習!