const cases = [
'kdO-315-Ю',
'kdO-314-Ю',
'kdO-316-Ю',
'jtd-777-ШАП',
'jDT-123-Л',
'kSR-665-ЪГА'
];
const expression = /^([A-Za-z]{3})-(?!315|777)(\d{1,3}|1000)-([А-ЯЁ]{1,3})$/;
for (const variant of cases) {
console.log(variant, expression.test(variant));
}
/*
'kdO-315-Ю' false
'kdO-314-Ю' true
'kdO-316-Ю' true
'jtd-777-ШАП' false
'jDT-123-Л' true
'kSR-665-ЪГА' true
*/
const useValue = (initialValue) => {
let currentValue = initialValue;
return [
() => currentValue,
(arg) => {
setTimeout(() => {
if (typeof arg === 'function') {
currentValue = arg(currentValue);
} else {
currentValue = arg;
}
});
}
];
};
const [getAge, setAge] = useValue(1);
setAge(getAge() + 1);
setAge(getAge() + 1);
// Подождем все вызовы обновлений:
setTimeout(() => {
console.log('age is', getAge()); // age is 2
// равно двум, т. к. в области видимости было 1
}, 100);
const [getAge, setAge] = useValue(1);
setAge(age => age + 1);
setAge(age => age + 1);
// Подождем все вызовы обновлений:
setTimeout(() => {
console.log('age is', getAge()); // age is 3
// на каждом setAge значение берется из замыкания (области видимости внутри useValue)
}, 100);
setCounter(() => 0 + 1)
. Значение не будет обновляться только потому, что в компонент оно еще не пришло, но внутри замыкания useState уже обновилось. Во втором случае, значение переменной берет как раз из замыкания useState.
delay(1000).then(() => console.log("hello"));
;)