Description The onChangeText for my TextInput used for a ChatBox is not working. After reset the text state to '' (after sending a message), the first character is always lost and the onChange event is not fired.
React Native Version 0.72.0
Output of npx react-native info System:
OS: macOS 13.4
CPU: (10) x64 Apple M1 Pro
Memory: 45.71 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 16.14.0
path: /usr/local/bin/node
Yarn:
version: 1.22.19
path: /usr/local/bin/yarn
npm:
version: 8.3.1
path: /usr/local/bin/npm
Watchman:
version: 2022.07.04.00
path: /usr/local/bin/watchman
Managers:
CocoaPods:
version: 1.11.3
path: /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 22.4
- iOS 16.4
- macOS 13.3
- tvOS 16.4
- watchOS 9.4
Android SDK: Not Found
IDEs:
Android Studio: 2022.2 AI-222.4459.24.2221.9971841
Xcode:
version: 14.3.1/14E300c
path: /usr/bin/xcodebuild
Languages:
Java:
version: 15.0.2
path: /usr/bin/javac
Ruby:
version: 2.6.10
path: /usr/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.2.0
wanted: 18.2.0
react-native:
installed: 0.72.0
wanted: 0.72.0
react-native-macos: Not Found
npmGlobalPackages:
"react-native ": Not Found
Android:
hermesEnabled: true
newArchEnabled: false
iOS:
hermesEnabled: true
newArchEnabled: false
Steps to reproduce Happens only with TextInput with multiline enabled, only iOS, only this specific flow
User input any characters into <TextInput/>, and press Send After msg is sent, <TextInput/> value is cleared via setText('') After that, when user input one character, onChangeText doesn't fire. Other flows onChangeText works normally, such as
Pressing 2 characters Clear the textinput via backspace Disable multiline Snack, code example, screenshot, or link to a repository Snack: https://snack.expo.dev/@tylerc/blessed-ice-cream The same issue can't be reproduced in Snack, only happens on iOS simulator or actual device
Screen.Recording.2023-06-28.at.10.18.29.AM.mov import React , { useCallback , useState } from 'react' ; import { SafeAreaView , StyleSheet , Text , TextInput , TouchableOpacity , View , } from 'react-native' ; function App ( ) : JSX . Element { const [ value , setValue ] = useState ( '' ) ; const onChangeText = useCallback ( ( text : string ) => { console . log ( 'onChangeText' , text ) ; setValue ( text ) ; } , [ ] ) ; const onPressSend = useCallback ( ( ) => { setValue ( '' ) ; } , [ ] ) ; return ( < SafeAreaView > < View style = { styles . container } > < TextInput style = { styles . textInput } multiline value = { value } onChangeText = { onChangeText } /> < TouchableOpacity style = { styles . sendContainer } onPress = { onPressSend } > < Text style = { [ styles . sendButton , textStateStyle ( value ) . conditionalStyle ] } > { 'Send' } </ Text > </ TouchableOpacity > </ View > </ SafeAreaView > ) ; } const textStateStyle = ( value : string ) => StyleSheet . create ( { conditionalStyle : { color : value . length ? 'dodgerblue' : 'lightgrey' } , } ) ; const styles = StyleSheet . create ( { container : { flexDirection : 'row' } , textInput : { height : 100 , flex : 1 , borderColor : 'black' , borderWidth : 1 , marginLeft : 5 , } , sendContainer : { alignItems : 'center' , justifyContent : 'center' , padding : 10 , } , sendButton : { fontSize : 16 , fontWeight : '800' } , } ) ; export default App ;
Description
The
onChangeTextfor my TextInput used for a ChatBox is not working. After reset the text state to '' (after sending a message), the first character is always lost and the onChange event is not fired.React Native Version
0.72.0
Output of
npx react-native infoSystem:
OS: macOS 13.4
CPU: (10) x64 Apple M1 Pro
Memory: 45.71 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 16.14.0
path: /usr/local/bin/node
Yarn:
version: 1.22.19
path: /usr/local/bin/yarn
npm:
version: 8.3.1
path: /usr/local/bin/npm
Watchman:
version: 2022.07.04.00
path: /usr/local/bin/watchman
Managers:
CocoaPods:
version: 1.11.3
path: /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 22.4
- iOS 16.4
- macOS 13.3
- tvOS 16.4
- watchOS 9.4
Android SDK: Not Found
IDEs:
Android Studio: 2022.2 AI-222.4459.24.2221.9971841
Xcode:
version: 14.3.1/14E300c
path: /usr/bin/xcodebuild
Languages:
Java:
version: 15.0.2
path: /usr/bin/javac
Ruby:
version: 2.6.10
path: /usr/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.2.0
wanted: 18.2.0
react-native:
installed: 0.72.0
wanted: 0.72.0
react-native-macos: Not Found
npmGlobalPackages:
"react-native": Not Found
Android:
hermesEnabled: true
newArchEnabled: false
iOS:
hermesEnabled: true
newArchEnabled: false
Steps to reproduce
Happens only with TextInput with
multilineenabled, only iOS, only this specific flow<TextInput/>, and press Send<TextInput/>value is cleared viasetText('')onChangeTextdoesn't fire.Other flows
onChangeTextworks normally, such asmultilineSnack, code example, screenshot, or link to a repository
Snack: https://snack.expo.dev/@tylerc/blessed-ice-cream
The same issue can't be reproduced in Snack, only happens on iOS simulator or actual device
Screen.Recording.2023-06-28.at.10.18.29.AM.mov