React Native中如何在按钮点击时模拟按键事件?
解决React Native中点击按钮触发TextInput的onSubmitEditing事件问题
不需要模拟按键事件,有两种更可靠的方式实现需求:
方法1:直接复用提交逻辑(推荐)
把输入文本用状态管理,点击按钮时直接调用onSubmitEditButton并传入当前输入值,逻辑和onSubmitEditing完全一致:
import { useState } from 'react'; import { TextInput, TouchableHighlight, Text, StyleSheet } from 'react-native'; function YourComponent() { const [inputText, setInputText] = useState(''); const onSubmitEditButton = (text) => { // 这里写你的提交逻辑 console.log('提交内容:', text); }; const handleSubmitPress = () => { onSubmitEditButton(inputText); }; return ( <> <TextInput style={styles.textInput} onSubmitEditing={event => onSubmitEditButton(event.nativeEvent.text)} onChangeText={setInputText} value={inputText} /> <TouchableHighlight onPress={handleSubmitPress} style={{position:"absolute", top:50}} > <Text>Submit</Text> </TouchableHighlight> </> ); } const styles = StyleSheet.create({ textInput: { height: 40, borderWidth: 1, paddingHorizontal: 10, }, });
方法2:调用TextInput内部方法触发onSubmitEditing
如果需要完整触发onSubmitEditing事件(比如依赖事件对象的其他属性),可以通过ref获取TextInput实例,调用其内部的submitEditing方法:
import { useRef } from 'react'; import { TextInput, TouchableHighlight, Text, StyleSheet } from 'react-native'; function YourComponent() { const inputRef = useRef(null); const onSubmitEditButton = (text) => { console.log('提交内容:', text); }; const handleSubmitPress = () => { // 调用内部方法触发onSubmitEditing inputRef.current?.submitEditing(); }; return ( <> <TextInput ref={inputRef} style={styles.textInput} onSubmitEditing={event => onSubmitEditButton(event.nativeEvent.text)} /> <TouchableHighlight onPress={handleSubmitPress} style={{position:"absolute", top:50}} > <Text>Submit</Text> </TouchableHighlight> </> ); } const styles = StyleSheet.create({ textInput: { height: 40, borderWidth: 1, paddingHorizontal: 10, }, });
注意:submitEditing是TextInput的内部方法,虽然在多数React Native版本中可用,但不属于公开API,若后续版本有变更可能失效。优先推荐方法1。
内容的提问来源于stack exchange,提问作者Anthon Santhez
相关产品推荐
相关产品推荐

