#node.js #reactjs #websocket
#node.js #reactjs #websocket
Вопрос:
В приложении для чата я хотел бы сбросить () поле ввода, в которое я отправляю сообщения при нажатии, чтобы поле ввода снова стало пустым. Вот что у меня есть.
const [message, setMessage] = useState("");
const [messages, setMessages] = useState([]);
const submit = (event) => {
event.preventDefault();
socket.emit("text-message", message);
};
<form onSubmit={submit} id="form">
<div className="input-group">
<input
name="message"
maxLength="60"
type="text"
placeholder="Message"
className="form-control"
onChange={(e) => {
setMessage(e.currentTarget.value);
}}
value={message}
id="text"
/>
<button id="send" type="submit" className="btn btn-primary">
Send
</button>
</div>
</form>
Комментарии:
1. Можете ли вы просто установить сообщение в своей функции отправки после успешной отправки? т.е.
setMessage('')
. Или вам нужно что-то более продвинутое?2. Это сделало это проще, чем ожидалось. Спасибо
Ответ №1:
Просто продолжение моего комментария, чтобы это можно было отметить как ответ. Я попытаюсь объяснить более подробно, чтобы любой, у кого есть подобная проблема, мог найти ответ более полезным.
Использование значения prop для ввода означает, что оно «контролируется«.
Это означает, что все, что вы когда-либо предоставляли для значения, — это то, что появится во входных данных.
Таким образом, изменить значение, отображаемое во входных данных, так же просто, как изменить переменную, используемую для значения prop, в данном случае message
.
Как message
создается useState
правильным способом его обновления, в данном случае используется соответствующий метод setState setMessage
. Это уже используется во фрагменте выше в событии onChange setMessage(e.currentTarget.value);
для обработки обновления message
по мере ввода данных пользователем.
Базовый сброс без специальной логики может быть достигнут с помощью setMessage('');
added to the end submit
функции, которая используется для действия с формой.
const submit = (event) => {
event.preventDefault();
socket.emit('text-message', message);
setMessage('');
};