如何将属性“OnChangeText”上的 TextInput 的“val”转换为 int。反应原生
Posted
技术标签:
【中文标题】如何将属性“OnChangeText”上的 TextInput 的“val”转换为 int。反应原生【英文标题】:How to convert to int the “val” of the TextInput on the prop “OnChangeText”. React Native 【发布时间】:2021-02-11 14:10:46 【问题描述】:我正在学习 React Native,我正在创建一个简单的应用程序来执行二次公式的解决方案。
问题出在我使用“onChangeText”道具在 TextInput 中捕获数字的那一刻。 react-native 文档说“onChangeText”道具返回一个简单的字符串值。话虽如此,我尝试使用 parseInt () 和 Number () 函数将“onChangeText”的值转换为 int,但没有任何效果,结果始终为 NaN。
有人知道如何将 TextInput 的值转换为 int 吗?
const App = () =>
var _a;
var _b;
var _c;
var res1;
var res2;
const result = () =>
Number(_a);
Number(_b);
Number(_c);
res1 = -1 * b + Math.sqrt(Math.pow(b, 2) - (4 * a * c)) / (2 * a);
res2 = -1 * b + Math.sqrt(Math.pow(b, 2) - (4 * a * c)) / (2 * a);
return (
<>
<ImageBackground source=image style=styles.img>
<ScrollView>
<View style=styles.title>
<Text style=styles.title_text>
Formula General
</Text>
</View>
<View style=marginTop: 10>
<View style=styles.container>
<Text style=styles.text>
Introduce el valor de A:
</Text>
<TextInput style=styles.textinput placeholder='ej. 10' onChangeText=(val) => a_=val></TextInput>
</View>
<View style=styles.container>
<Text style=styles.text>
Introduce el valor de B:
</Text>
<TextInput style=styles.textinput placeholder='ej. 3' onChangeText=(val) => b_ = val></TextInput>
</View>
<View style=styles.container>
<Text style=styles.text>
Introduce el valor de C:
</Text>
<TextInput style=styles.textinput placeholder='ej. 3' onChangeText=(val) => c_set=val></TextInput>
<TouchableOpacity style=backgroundColor:'#07057E', marginTop: 95, width: 100, marginLeft:0, position: 'absolute', paddingLeft: 20, paddingBottom:20, paddingRight: 20, paddingTop: 10 onPress=operacion>
<Text style=color:'#fff', fontWeight:'bold', fontSize:11>Hacer Operacion</Text>
</TouchableOpacity>
</View>
</View>
<View style=alignItems: 'flex-start', flexDirection:'column', justifyContent:'flex-start', position: 'absolute'>
<View style=styles.result>
<Text style=styles.text>
Resultado:
</Text>
<Text style=styles.res>
Solucion 1: res1'\n''\n''\n''\n''\n'
Solucion 2: res2
</Text>
</View>
</View>
</ScrollView>
</ImageBackground>
</>
);
;
【问题讨论】:
【参考方案1】:当输入为空时,结果为 NaN。在使用 parseInt 之前,您需要检查文本 val。如果为空,则可以返回默认值。 如果此输入仅用于数字,我认为“keyboardType='numeric'”是更好的选择。
【讨论】:
【参考方案2】:您可以使用状态。我已经用不同的版本编码了你的代码。负数的平方根将产生 NaN。如果要处理更大的位,请使用 BigInt。
import * as React from 'react';
import useState from 'react';
import Text, View, StyleSheet,TextInput,Component from 'react-native';
import Constants from 'expo-constants';
/* global BigInt */
// You can import from local files
import AssetExample from './components/AssetExample';
// or any pure javascript modules available in npm
import Card from 'react-native-paper';
export default function App()
const [a,setA] = useState(1);
const [b,setB] = useState(20);
const [c,setC] = useState(-1);
const [res1,setRest1] = useState(0);
const [res2,setRest2] = useState(0);
const result1 = () =>
return -1 * b + Math.sqrt(Math.pow(b, 2) - (4 * a * c)) / (2 * a);
const result2= () =>
return BigInt(10**100);//Math.sqrt(-5);
return (
<View style=styles.container>
<Text style=styles.paragraph>
Result 1:result1()
</Text>
<Text style=styles.paragraph>
Result 2:result2().toString()
</Text>
<TextInput placeholder='Input a Here' onChangeText=(val) => setA(val) ></TextInput>
<TextInput placeholder='Input b Here' onChangeText=(val) => setB(val) ></TextInput>
<TextInput placeholder='Input c Here' onChangeText=(val) => setC(val) ></TextInput>
<Card>
<AssetExample />
</Card>
</View>
);
const styles = StyleSheet.create(
container:
flex: 1,
justifyContent: 'center',
paddingTop: Constants.statusBarHeight,
backgroundColor: '#ecf0f1',
padding: 8,
,
paragraph:
margin: 24,
fontSize: 18,
fontWeight: 'bold',
textAlign: 'center',
,
);
https://snack.expo.io/@zawhtutwin/so_64585929
【讨论】:
以上是关于如何将属性“OnChangeText”上的 TextInput 的“val”转换为 int。反应原生的主要内容,如果未能解决你的问题,请参考以下文章
如何在 TextInput 组件中更改边框颜色“onChangeText”
如何在 OnChangeText 中向我的组件 inputText 添加两个状态
React Native TextInput 有一个默认值当状态改变时我们如何更新/传递 DefualtValue 作为文本条目(onchangetext)
React Native:TextInput toUpperCase 在 onChangeText 中的 Android 上不起作用