Первый - для e
это undefined
:
Вы должны передавать ReplyAnswer
только событию onClick
из button
, не переносите это в функции стрелки:
<button onClick={ReplyAnswer} className="replyBtn"> Reply </button>
Это передаст объект события в ваш ReplyAnswer
как параметр e
. Если вы заключите свой ReplyAnswer
в функцию стрелки и вызовете его без передачи ему каких-либо параметров, как то, что вы сделали:
() => { ReplyAnswer() }
, вы можете увидеть, что ReplyAnswer
не получает параметров, поэтому ваш e
равно undefined
. Ваша стрелочная функция также является функцией с нулевым параметром, поэтому она не будет получать объект события из события onClick
.
Второй - для e.target.value
это null
:
Поскольку вы вызываете ReplyAnswer
в событии onClick
из button
, поэтому e.target.value
равно null
.
Чтобы решить эту проблему, вы можете обернуть свои input
и button
внутри form
, например:
<form onSubmit={ReplyAnswer}>
<input
className="replyForminput"
name="content"
required
placeholder={'Reply to '+props.title}
autoCorrect="off"
autoComplete="off" />
<button type="submit" className="replyBtn"> Reply </button>
</form>
Добавьте type="submit"
в свой button
и переместите ReplyAnswer
из onClick
события button
в onSubmit
из form
. Не забудьте добавить свойство name
для ввода.
Затем в своем ReplyAnswer
сделайте следующее:
function ReplyAnswer(e) {
e.preventDefault();
var data = new FormData(e.target);
var rcontent = data.get("content"); // your input `name` property is `content`
var date = moment().utcOffset('+05:30').format('hh:mm A DD-MM-YYYY');
firebase.firestore().collection('qna2dreply').add({
rcontent,
replyby: userName,
replybyid: userID,
replytoid: props.id,
time: new Date(),
time2: date
}).then(() => {
document.getElementById('xxx').value = '';
swal("Successfully Replied to "+props.title);
});
}
Интерфейс FormData
предоставляет способ легко создать набор пар ключ / значение, представляющих поля формы и их значения. Подробнее здесь: https://developer.mozilla.org/en-US/docs/Web/API/FormData.