Tengo un estado de contexto de reacción para mis valores de entrada de múltiples formularios:
const [formValues, setFormValues] = useState({ sex: "male", unitSystem: "metric", heightInCm: "173", weightInKg: "60", dateOfBirth: null, }); y estoy luchando por entender cómo debo manejar mis entradas de números, como la altura y el peso. Por el momento tengo que almacenarlos en formato de cadena, porque TextInput solo acepta una cadena. Me encuentro teniendo que seguir convirtiendo cadenas en números para validaciones.
Por ejemplo, este es mi controlador de entrada:
const toCm = (foot: string, inches: string) => { const footInCm = convert(parseInt(foot)).from("ft").to("cm"); const inchesToCm = convert(parseInt(inches)).from("in").to("cm"); const actualCm = footInCm + inchesToCm; return actualCm; }; const handleImperialSubmit = () => { toCm(foot, inches); setFormValues((prev) => ({ ...prev, heightInCm: toCm(foot, inches).toString(), })); setModalVisible(!modalVisible); };¿Hay alguna manera de trabajar con números reales en reaccionar nativo, porque esto es muy confuso?
La respuesta corta: No.
La respuesta más larga: Todavía no, no hay forma de que el TextInput de React Native le devuelva números, en parte probablemente porque no hay forma de restringir la entrada a números solo que están integrados en TextInput . Tienes un par de opciones que pueden hacer tu vida más fácil.
const [number, onChangeNumber] = React.useState(null) return ( <TextInput style={styles.input} onChangeText={textValue => { if(!isNaN(textValue) && !isNaN(parseInt(textValue))) { onChangeNumber(parseInt(textValue)) } else if (textValue === "") { onChangeNumber(null) } }} value={number?.toString()} keyboardType="numeric" /> )Puede crear un componente a partir de esto o envolver la lógica en un gancho para reutilizarlo en todas sus "entradas numéricas". El ejemplo anterior puede ser un poco exagerado después de configurar el teclado en numérico, pero desde ese teclado puede incluir un decimal que puede o no desear. La lógica se puede actualizar en consecuencia.
entre otros.