#javascript #reactjs #react-native #onkeypress
#javascript #reactjs #реагирует на собственные #onkeypress
Вопрос:
Я использую expo. Единственное, что я создал, это простой компонент TextInput для обработки пользовательского ввода. Проблема в том, что когда я пишу некоторый текст во входных данных, а затем набираю клавишу пробела на клавиатуре. Пробел записывается в поле ввода, но событие onKeyPress не вызывается. Аналогично, если я пишу какой-либо текст, а затем дважды нажимаю кнопку пробела, вызывается событие onKeyPress, но клавиши nativeEvent — это ‘Backspace’ и ‘ ‘.
Вот код, который используется для его тестирования:
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, TextInput, View } from 'react-native';
export default function App() {
let textInputChangeHandler = ev => {
console.log(ev.nativeEvent);
//socket.type(ev.nativeEvent.key);
};
return (
<View style={styles.container}>
<TextInput onKeyPress={textInputChangeHandler} style={styles.textInput}/>
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
textInput: {
borderColor: "black",
borderWidth: 1,
width: 200
}
});
Пример ввода:
Напишите «Привет» —> затем введите пробел два раза
Вывод журнала консоли:
Object {
"key": "H",
}
Object {
"key": "e",
}
Object {
"key": "l",
}
Object {
"key": "l",
}
Object {
"key": "o",
}
Object {
"key": "Backspace",
}
Object {
"key": " ",
}
Ожидаемый результат:
Object {
"key": "H",
}
Object {
"key": "e",
}
Object {
"key": "l",
}
Object {
"key": "l",
}
Object {
"key": "o",
}
Object {
"key": " ",
}
Object {
"key": " ",
}
Если я введу один пробел, результат будет следующим::
Object {
"key": "H",
}
Object {
"key": "e",
}
Object {
"key": "l",
}
Object {
"key": "l",
}
Object {
"key": "o",
}
но я ожидаю, что:
Object {
"key": "H",
}
Object {
"key": "e",
}
Object {
"key": "l",
}
Object {
"key": "l",
}
Object {
"key": "o",
}
Object {
"key": " ",
}
Я использовал свой Motorola One 5g для тестирования. Я не проводил никаких тестов на эмуляторе.
Комментарии:
1. Вы можете проверить свой код в следующем эмуляторе, он работает нормально! codesandbox.io/s/determined-bardeen-3sv9b?file=/src/App.js
2. @farzaneh да, это то поведение, которое я хочу. Я протестировал его на react, и он работает отлично; Проблема возникает только при тестировании на устройстве Android.
3. Вы также можете использовать
onChange
обработчик событий, который обнаруживает символы клавиатуры в свойстве данныхnativeEvent
объекта и распознаетbackspace
asnull
.