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. const transform = entry => 'postedAt' in entry
? ({
...entry,
postedAt: new Date(entry.postedAt * 1000).toLocaleString('ru-RU'),
})
: entry;
const mapper = collection => collection.reduce((acc, entry) => {
const data = transform(entry);
if (Array.isArray(data.answers)) {
data.answers = mapper(data.answers);
}
acc.push(data);
return acc;
}, []);
$('.form').on('submit', function (e) {
e.preventDefault();
var values = {};
$('.form__check').each(function () {
if ($(this).is(':checked')) {
var splitted = $(this).attr('name').split('-');
var name = splitted[0];
var value = splitted.slice(1).join('-');
if (name) {
if (!(name in values)) {
values[name] = [];
}
values[name].push(value);
}
}
});
for (var key in values) {
$('.inputs__value--' + key).text(values[key].join(','));
}
});
const
и let
на var
заменятся (если старые браузеры поддерживать), шаблонная строка на обычную конкатенацию, ??=
проверка на undefined
. Самое сложное - rest
-операция и деструктуризация, вот там Babel превосходно справится. (Либо можете вернуть старую операцию со splice
). electron-winstaller
в package.json
? Если есть, попробуйте его убрать.$ npm install --save-dev @babel/core @babel/preset-react babel-loader
added 142 packages, and audited 143 packages in 7s
14 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities