react-native - 使用 dd/mm/yyyy 的预定义格式反应原生创建文本字段
问题描述
我创建了自己的 Texfield,我在整个应用程序中都使用它。我现在想创建一个具有预定义输入格式的文本字段。因此,例如,如下图所示,我希望文本始终具有格式dd/mm/yyyy
,并且在填写日期时输入跳转到月份。
此图像是我尝试完成的示例:
这是我的自定义文本字段,它基本上是TextInput
带有一些样式的本机。
//Input.tsx
interface Props {
errorMessage?: string
placeholder: string
value: string
onChange: (text: string) => void
}
const Input: React.FC<Props> = ({
errorMessage,
placeholder,
onChange,
value,
}) => {
const [focused, setFocused] = useState(false)
return (
<Box marginVertical="xs">
<Box
borderColor={errorMessage ? 'error' : focused ? 'primary' : 'inputBG'}
paddingVertical="inputS"
paddingHorizontal="inputM"
borderRadius="s"
borderWidth={2}
backgroundColor={errorMessage ? 'inputErrorBG' : 'inputBG'}
>
<TextInput
placeholder={placeholder}
onFocus={() => setFocused(true)}
onBlur={() => setFocused(false)}
onChangeText={onChange}
value={value}
/>
</Box>
{errorMessage ? <Text color="error">{errorMessage}</Text> : null}
</Box>
)
}
解决方案
我发现这个包提供了MaskInput
可以定义掩码来格式化输入的组件。
下面我Input
使用variant
道具扩展了我的自定义,以在变体为“日期”时显示 MaskInput。
import MaskInput, { Masks } from 'react-native-mask-input'
{variant === 'date' ? (
// @ts-ignore
<MaskInput
placeholder="dd/mm/yyyy"
mask={Masks.DATE_DDMMYYYY}
onFocus={() => setFocused(true)}
onBlur={() => setFocused(false)}
onChangeText={(formatted) => onChange(formatted)}
value={value}
keyboardType={keyboardType}
/>
) : (
<TextInput
placeholder={placeholder}
onFocus={() => setFocused(true)}
onBlur={() => setFocused(false)}
onChangeText={onChange}
value={value}
keyboardType={keyboardType}
/>
)}
推荐阅读
- java - Spring boot Liquibase 表创建 Postgres 引用问题
- javascript - 我如何通过在 react-native 中使用反应导航来传递数据?
- sql - SQL Server 获取标识号并分配给另一个列值
- pandas - 熊猫添加日期时间列
- python - 使用 XGBOOST 执行特征选择时的不同结果
- javascript - 在与 ngFor 相同的标签中作为点击函数是一个好习惯吗?角度和 JS
- python - 从列表列创建一个新的 Pandas 数据框
- python - 当我运行我的代码(关于使用 python 纸浆进行线性编程)时,无法得到任何答案
- javascript - 我收到 Postgresql 的 created_on 日期的语法错误
- phpmyadmin - #1227 - 访问被拒绝;您在 000webhost 中需要(至少一个)此操作的 SUPER 权限