axios.interceptors.request.use(async config => {
const token = await getToken(); // тут либо отдаём живой токен сразу, либо получаем новый
config.headers.Authorization = 'Bearer ' + token;
return config;
});
Ошибок ждать не надо.forEach
- синхронный. Либо используйте либы умеющие в асинхронный forEach, либо используйте обычные циклы:export const setGenderThunk = (gender, login) => {
return async dispatch => {
const users = await getUsers || []; // там внутри fetch
for(let user of users) {
if(user.login === login) {
const user_ = { ...user, gender: gender };
await setUser(user_, user.id); // там тоже внутри fetch
debugger
if(result.ok) {
dispatch(setGenderAC(user_.gender));
}
}
};
}
}
forEach
отрабатывает всё равно синхрнно, но при этом единовременно плодит множество асинхронных функций выполняющихся параллельно (которых, само собой, никто не ждёт). menu
есть в спеке html, хоть и deprecated вроде, а так - тебе ничто не мешает юзать незарезервированные названия.Vue.config.isReservedTag = function(isReservedTag){
const allowedTags = ['menu'];
return function(tag) {
if(allowedTags.includes(tag)) return false;
return isReservedTag.call(this, tag);
}
}(Vue.config.isReservedTag);
--save
нет, есть --save-prod
(которая не нужна, т.к. по умолчанию).--save-dev
- очевидно, устанавливает devDependencies.error
, а не warning
- меня всегда вымораживает.watch
- это внутренняя особенность Vue, и работает она только на реактивных свойствах. const cookies = Vue.observable({});
(function update(prevString) {
const cookieString = document.cookie;
if (prevString !== cookieString) {
const cookieObject = Object.fromEntries(
cookieString.split(/; */)
.map(
c => c
.split('=', 2)
.map(decodeURIComponent)
)
);
for (const [name, value] of Object.entries(cookies)) {
if (name in cookieObject) {
if (cookieObject[name] === value)
delete cookieObject[name];
} else {
Vue.delete(cookies, name);
}
}
for (const [name, value] of Object.entries(cookieObject)) {
Vue.set(cookies, name, value);
}
}
setTimeout(update, 100, cookieString);
}());
Vue.util.defineReactive(Vue.prototype, '$cookies', cookies);
Теперь можешь делать так this.$watch('$cookies.cookie_name', () => {...})
this.$cookies.cookie_name = 'cookie_value'
- тут уж самостоятельно) Promise.all
:function XMLHttpPromise(method, url, data) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.onload = () => {
if (xhr.status === 200 && xhr.readyState === 4)
resolve(xhr.responseText);
else
reject("Error");
}
xhr.onerror = xhr.ontimeout = reject;
xhr.send(data);
})
}
Promise.all([
XMLHttpPromise('GET', `style.css`),
XMLHttpPromise('GET', `xmlData.html`)
]).then(([value, secondValue]) => {
console.log(value);
console.log(secondValue);
}).catch(console.error);
Иначе зачем вообще нужны алиасы в ts?
paths
запилили, чтобы отразить поведение модных сборщиков, типа webpack, а не наоборот. Т.е. предполагается, что paths
используются только когда уже есть сборщик который осуществляет всю логику, а не как первичный источник конфигурации. require
, очевидно, исполняется* во время создания(декларации) экспортируемого объекта, задолго до того как этот объект попадёт в Vue и превратится в Vue-компонент.require
, очевидно, исполняется в глобальном контексте, в котором недоступен (какой-либо) this
.<template>
<div>
<component :is="SvgView" class="sp-svg-styles"/>
</div>
</template>
<script>
export default{
props:['name'],
computed: {
SvgView() {
return require('./../Icons/'+this.name+'.svg');
}
}
}
</script>
require
на самом деле работает на этапе компиляции, подготавливая и загружая в бандл все файлы по маске ./../Icons/*.svg
, а на этапе исполнения заменяется внутренней функцией, возвращающей значение по имени. class A {
static bool: boolean = true;
}
class B extends A {
static readonly bool = true;
}
class C extends A {
static readonly bool = false;
}
function func<T extends typeof A, P = T['bool'] extends true ? number : string>(param: P) { }
func<typeof B>(123); //ok
func<typeof B>('random string'); //not ok
func<typeof C>(123); //not ok
func<typeof C>('random string'); //ok