我遇到了TextInput问题,该问题从用户那里获取输入,还有一个按钮在TextInput中发送消息并清除了输入。 因此,总体流程为:
- 用户输入到TextInput
- 用户有时会按下Button(又名TouchableOpacity)
- 将文本从TextInput存储到临时缓冲区,然后清除TextInput。
- 通过api发送文本。
代码如下:
{/* Message Input */}
<TextInput
style={styles.messageInput}
multiline
onChangeText={text => {
setMessage(text);
}}
value={message}
/>
{/* Send Button */}
<Button
title={"Send"}
onPress={() => {
const msg = message
onSendMessage(msg);
setMessage("");
}}
disabled={false}
style={styles.sendButton}
/>
当用户在点击发送按钮后过早键入内容时,就会出现我的问题。 如果用户决定键入得太早,则不会清除TextInput。 我认为这是因为:
- 用户轻按send =>使呈现入队,因为在Button的onPress中通过setMessage(“”)改变了消息状态
- 用户类型过早=>使呈现入队,因为消息由TextInput中的onChangeText处理程序更改。问题是尚未真正处理先前状态的setMessage。因此,此呈现器与消息的先前值(也就是消息设置为“”之前的值)排队。
我尝试了Promise,useEffect和useRef,但没有什么能真正解决此问题。如果有人知道如何解决此问题,请告诉我。预先谢谢你。