#reactjs
#reactjs
Вопрос:
Я реализую функцию сохранения в форме, которую я создаю в React. Когда пользователь нажимает сохранить в форме, я хочу, чтобы они вводили имя пользователя / пароль. В следующий раз, когда тот же пользователь попытается сохранить, если прошло менее 15 минут, я хочу, чтобы им не нужно было подписывать имя пользователя / пароль для сохранения. Если он превышает 15, я хочу, чтобы они снова прошли аутентификацию.
Я наткнулся на этот код в другом вопросе stackoverflow о таймаутах.
calculateHours(date1 , expireTime){
const dateOne = date1;
const dateTwo = new Date();
const dateOneObj = new Date(dateOne);
const dateTwoObj = new Date(dateTwo);
const hours = Math.abs(dateTwoObj - dateOneObj)/ 36e5;
const minutes = hours/ 36e5;
return expireTime > hours ? true : false
}
Код для определения 15-минутного тайм-аута в настоящее время.
if(this.calculateHours(localStore.time , 15)){
this.wrappedClickHandler()
Это для 15-минутного тайм-аута, но код действительно неаккуратный и уродливый, и мне было интересно, есть ли у кого-нибудь лучший способ реализовать это?
Ответ №1:
Если вы не используете библиотеку для обработки времени, получить лучший код не так просто: вы можете сделать несколько лучших имен, но операция аналогична:
const isExpired = (startDate, minutes) => {
startDate = startDate instanceof Date ? startDate : new Date(startDate)
const diff = new Date() - new Date(startDate)
const minutesDiff = Math.floor((diff/1000)/60);
return minutesDiff >= minutes
}
Комментарии:
1. Я подумал, что без дополнительных библиотек это может быть лучшим способом обработки функции тайм-аута. Но приведенный выше код — гораздо более чистый способ реализации. Большое вам спасибо за вашу помощь.
Ответ №2:
Вы можете использовать setTimeout . Функция будет выполнена через заданное время
setTimeout(() => {
...your necessary code for requiring user to enter username amp; password...
}, 15 * 60 * 1000) // since time is to be written in milliseconds
Комментарии:
1. это действительно интересный способ реализации тайм-аута. Спасибо за информацию.
Ответ №3:
Когда дело касается времени, я всегда использую epochMilli. new Date().getTime()
тогда плюс 15 минут (15*60*1000 ) миллисекунды должны быть эпохальными, которые где-то хранятся (redux?) А затем вы используете функцию isExpired для проверки каждого нажатия пользователем кнопки сохранить.
const isExpired = (epochExpiresAt) => epochExpiresAt > new Date().getTime()