如何将 useState 更新为 TextInput
How to update useState into TextInput
我在 React Native 中有一个简单的 <TextInput>
,我想在值更改时打印一些文本。它在输入第二个字符后起作用,但当用户只按一个字符时不起作用。
我尝试使用函数,甚至使用 onChange 并从 e.target.value 中获取,但总是在 "search" 状态下缺少一个字符。
import React, { useState } from 'react';
import { TextInput, View, Text } from 'react-native';
const App = () => {
const [search, setSearch] = useState('');
const [searching, setSearching] = useState(false);
return(
<View>
<TextInput
onChangeText={(value) => {
setSearch(value)
setSearching(search=='' ? false : true)
}}
value = { search }
/>
{
searching ?
(
<Text>Searching</Text>
) : (
<Text>No searching</Text>
)
}
</View>
);
}
export default App
我希望在 TextBox 值不为空时显示 "Searching"。
你需要比较TextInput
的实际值
使用search=='' ? false : true
会检查之前的状态,不会改变
onChangeText={(value) => {
setSearch(value)
setSearching(search=='' ? false : true)
}}
这将检查更改的值。
onChangeText={(value) => {
setSearch(value)
setSearching(value == '' ? false : true) // use value
}}
您需要使用 value
而不是 search
只需更改此
setSearching(search=='' ? false : true)
到
setSearching(value=='' ? false : true)
useState
或setState
may be asynchronous,所以第一次调用setSearch(value)
时,search
状态可能还没有更新。
onChangeText={(value) => {
setSearch(value)
setSearching(search == '' ? false : true) // "search" is still previous value
}}
相反,您可以直接使用value
代替检查。
onChangeText={(value) => {
setSearch(value)
setSearching(value == '' ? false : true) // value is latest
}}
在双方的帮助下我解决了。这是对某人有帮助的代码。这个想法是一个左侧带有 len 图标的 TextInput,当用户开始编写时调用 Firebase 并在右侧显示一个加载图标(微调器)。
<Icon
name='search'
size={25}
color={PRIMARY_BACKGROUND_COLOR}
style={styles.searchIcon}
/>
<TextInput
underlineColorAndroid = 'transparent'
style = { styles.textBox }
onChangeText={(value) => { onChangeText(value) }}
value = { search }
placeholder = { i18n.t('Search') }
/>
{
searching ?
(
<TouchableOpacity style = { styles.visibilityBtn }>
<Animatable.View
ref={ref => (this.AnimationRef = ref)}
animation='rotate'
easing='linear'
iterationCount='infinite'
>
<Icon
name='spinner-3'
size={20}
color={PRIMARY_BACKGROUND_COLOR}
/>
</Animatable.View>
</TouchableOpacity>
) : (
<TouchableOpacity onPress={ clearSearch } style = { styles.visibilityBtn }>
<Icon
name='close'
size={20}
color={PRIMARY_BACKGROUND_COLOR}
/>
</TouchableOpacity>
)
}
和函数
const onChangeText = value => {
setSearch(value)
setSearching(value =='' ? false : true)
Helper.getCategoriesSearch(value, (categories) => {
setSearching(false)
//props.searchResults(categories); THIS DO NOT WORK RETURN DATA TO props :(
})
}
谢谢大家
我在 React Native 中有一个简单的 <TextInput>
,我想在值更改时打印一些文本。它在输入第二个字符后起作用,但当用户只按一个字符时不起作用。
我尝试使用函数,甚至使用 onChange 并从 e.target.value 中获取,但总是在 "search" 状态下缺少一个字符。
import React, { useState } from 'react';
import { TextInput, View, Text } from 'react-native';
const App = () => {
const [search, setSearch] = useState('');
const [searching, setSearching] = useState(false);
return(
<View>
<TextInput
onChangeText={(value) => {
setSearch(value)
setSearching(search=='' ? false : true)
}}
value = { search }
/>
{
searching ?
(
<Text>Searching</Text>
) : (
<Text>No searching</Text>
)
}
</View>
);
}
export default App
我希望在 TextBox 值不为空时显示 "Searching"。
你需要比较TextInput
使用search=='' ? false : true
会检查之前的状态,不会改变
onChangeText={(value) => {
setSearch(value)
setSearching(search=='' ? false : true)
}}
这将检查更改的值。
onChangeText={(value) => {
setSearch(value)
setSearching(value == '' ? false : true) // use value
}}
您需要使用 value
而不是 search
只需更改此
setSearching(search=='' ? false : true)
到
setSearching(value=='' ? false : true)
useState
或setState
may be asynchronous,所以第一次调用setSearch(value)
时,search
状态可能还没有更新。
onChangeText={(value) => {
setSearch(value)
setSearching(search == '' ? false : true) // "search" is still previous value
}}
相反,您可以直接使用value
代替检查。
onChangeText={(value) => {
setSearch(value)
setSearching(value == '' ? false : true) // value is latest
}}
在双方的帮助下我解决了。这是对某人有帮助的代码。这个想法是一个左侧带有 len 图标的 TextInput,当用户开始编写时调用 Firebase 并在右侧显示一个加载图标(微调器)。
<Icon
name='search'
size={25}
color={PRIMARY_BACKGROUND_COLOR}
style={styles.searchIcon}
/>
<TextInput
underlineColorAndroid = 'transparent'
style = { styles.textBox }
onChangeText={(value) => { onChangeText(value) }}
value = { search }
placeholder = { i18n.t('Search') }
/>
{
searching ?
(
<TouchableOpacity style = { styles.visibilityBtn }>
<Animatable.View
ref={ref => (this.AnimationRef = ref)}
animation='rotate'
easing='linear'
iterationCount='infinite'
>
<Icon
name='spinner-3'
size={20}
color={PRIMARY_BACKGROUND_COLOR}
/>
</Animatable.View>
</TouchableOpacity>
) : (
<TouchableOpacity onPress={ clearSearch } style = { styles.visibilityBtn }>
<Icon
name='close'
size={20}
color={PRIMARY_BACKGROUND_COLOR}
/>
</TouchableOpacity>
)
}
和函数
const onChangeText = value => {
setSearch(value)
setSearching(value =='' ? false : true)
Helper.getCategoriesSearch(value, (categories) => {
setSearching(false)
//props.searchResults(categories); THIS DO NOT WORK RETURN DATA TO props :(
})
}
谢谢大家