calc(100vw - 100%)
- ширина сколлбара. Используя это - можно что-то намагичить.:)calc(min(100vw - 100%, 1px) * 10)
, где результат min будет 1px или 0px в зависимости от наличия скроллбара, а 10 - любой нужный множитель.:)useApiFetch
, очень многое в vue 3 можно сломать неудачной деструктуризацией. Но допустим сам хук нормальный.isPending
- это ref
, а значит он и должен быть прокси, чтоб собственно работала энтая самая реактивность. Чтоб отобразить в консоли чистый объект - есть хэлпер toRaw
(только после этого он уже не будет динамическим).isPending.value
- то в консоль, очевидно, попадает значение на момент вызова console.log
. Магическим образом прямо в консоли оно уже не изменится.isPending
- можешь сделать так:watch(isPending, (value) => console.log('watch isPending', value), { immediate: true });
{
beforeCreate() {
this._oldTitle = document.title;
},
unmounted() {
if (this.PAGE_TITLE)
document.title = this._oldTitle;
},
watch: {
PAGE_TITLE: {
handler(val, oldVal) {
if (val)
document.title = val;
else
document.title = this._oldTitle;
},
immediate: true
},
}
}
this.PAGE_TITLE
. const PAGE_TITLE = ref('<title>'); // computed(() => ...)
// ...
return {
PAGE_TITLE,
// ...
}
+ expose({ PAGE_TITLE })
foo?.bar
) или nullish coalescing (foo ?? bar
), а версия браузера у вас там старая и не поддерживает такой фичи.Chrome <= 70
(а не last 1
, что там скорее всего по умолчанию), чтоб при билде он эти фичи заменил на старые альтернативы. class Users {
constructor() {
this.store = []
}
[Symbol.iterator] = () => this.store[Symbol.iterator]()
}
Но взможно вам проще и красивее будет сделать самих User'ов наследником массива: class Users extends Array {
constructor() {
super();
}
}
И использовать сразу this
вместо this.store
со всеми методами массива кроме тех которые вы переопределите:). let newsListItem = defineProps({
newsListItem: Object
});
defineProps({
newsListItem: Object
});
const props = defineProps({
newsListItem: Object
});
function slow(x) { ... }
var slow;
slow = function (x) { ... };
slow = cachingDecorator(slow);
items.forEach(item => item.alert = false)
const [selected, setSelected] = useState('all');
let filterdTodos;
switch(selected) {
case 'all':
filterdTodos = todos;
break;
case 'checked':
filterdTodos = todos.filter(t => t.checked);
break;
case 'notChecked':
filterdTodos = todos.filter(t => !t.checked);
break;
}
const [selected, setSelected] = useState('all');
const filterdTodos = useMemo(() => {
switch(selected) {
case 'all':
return todos;
case 'checked':
return todos.filter(t => t.checked);
case 'notChecked':
return todos.filter(t => !t.checked);
}
}, [selected, todos])
<select className="todos__filter" onChange={(event) =>setSelected(event.target.value)}>
...
{filterdTodos.map(...)}
products
должны быть ref
. Сейчас они не реактивны(никак не реагируют на изменения). При этом ты присваииваешь массиву value. То что это хоть как-то работало - очередное чудо.export const useAllMainFiltersStore = defineStore('allMainFilters', () => {
const products = ref([]);
try {
async function getStoreData() {
sidebarResizeStore.updateSidebarVisibility()
const data = await productsData();
products.value = data;
}
getStoreData()
} catch (error) {
console.error('Error:', error);
}
return {
products,
}
})
const route = useRoute();
// продукт делаем вычисляемым, чтоб не городить вотчеров
const product = computed(() => getProductById(route.params.id));
function getProductById(id) {
console.log('products component: ', mainFiltersStore.products) //при первой загрузке всё ок, при перезагрузке страницы всё ломается и пустой массив в придачу
return products.find(product => product.id == id);
}
watch(product, current => {
// проверяем что продукт есть
if (current) fetchComments(current.id);
}, { immediate: true })