имеется pinia такого вида
<...>
export const useSearchStore = () => {
const { search, updateSearchQuery } = useSearchStore();
Note thatstore
is an object wrapped withreactive
, meaning there is no need to write.value
after getters but, likeprops
insetup
, we cannot destructure it
const useSearchStore = defineStore('search', () => {
const search = ref('');
const setSearch = val => search.value = val;
return { search, setSearch };
});
const searchStore = useSearchStore();
const search = computed({
get: () => searchStore.search,
set: searchStore.setSearch,
});
<input v-model.trim="search">
const searchStore = useSearchStore();
watch(() => searchStore.search, val => console.log(val));
async function getFirstLoadedImage(urls) {
for (const n of urls) {
try {
return await loadImage(n);
} catch (e) {}
}
throw 'ничего загрузить не удалось';
}
const getFirstLoadedImage = (urls, i = 0) => i < urls.length
? loadImage(urls[i]).catch(() => getFirstLoadedImage(urls, -~i))
: Promise.reject('ничего загрузить не удалось');
getFirstLoadedImage(resolutions.map(n => `https://i.ytimg.com/vi/${videoId}/${n}.jpg`))
.then(img => document.body.append(img))
.catch(console.error);
.item-gallery
, и вызываем bind для каждого из них отдельно:document.querySelectorAll('.item-gallery').forEach(n => {
Fancybox.bind(n, '[data-fancybox="single"]', {});
});
Удалился вопрос на этом форуме
у кого-то уже было такое?
Модераторы, ответьте
напишите пожалуйста причину
useEffect(() => setValue(props.value), [ props.value ]);
const rowspan = shards => shards.reduce((acc, n) => acc + n.jobs.length, 0);
<table>
<thead>
<tr>{HEADERS.map(n => <th>{n}</th>)}</tr>
</thead>
<tbody>{
DATA.flatMap(({ cloud, shards }) =>
shards.flatMap((shard, iShard) =>
shard.jobs.map((job, iJob) =>
<tr>
{!iShard && !iJob && <td rowSpan={rowspan(shards)}>{cloud}</td>}
{!iJob && <td rowSpan={shard.jobs.length}>{shard.repository}</td>}
{!iJob && <td rowSpan={shard.jobs.length}>{shard.repository_size_gb}</td>}
<td>{job.job}</td>
<td>{job.job_description}</td>
<td>{job.backup_name}</td>
<td>{job.backup_size_gb}</td>
</tr>
)))}
</tbody>
</table>
onClickCapture
: A version ofonClick
that fires in the capture phase.
animation-delay
в зависимость от индекса в v-for
:v-for="(n, i) in items"
:style="{ 'animation-delay': i * 0.5 + 's' }"
индекс используется для других целей, там текстовая строка, а не число. В этом и сложность задачи
v-for
для объектов выдаёт три значения, как раз для того, чтобы у свойств тоже мог быть индекс. function merge($arrs, $idKey, ...$sumKeys) {
$result = [];
foreach (array_merge(...$arrs) as $n) {
$id = $n[$idKey];
$result[$id] ??= array_merge($n, array_combine($sumKeys, array_fill(0, count($sumKeys), 0)));
foreach ($sumKeys as $k) {
$result[$id][$k] += $n[$k];
}
}
return array_values($result);
}
$result = merge($dates1, 'date', 'qty');
function groupValues(arr, defaultValue = null) {
const keys = [...new Set(arr.flatMap(Object.keys))];
return arr.reduce((acc, n) => {
keys.forEach(k => acc[k].push(Object.hasOwn(n, k) ? n[k] : defaultValue));
return acc;
}, Object.fromEntries(keys.map(k => [ k, [] ])));
}
const result = groupValues(arr);
const groupValues = (arr, defaultValue = null) =>
arr.reduce((acc, n, i, a) => (
Object
.keys(n)
.forEach(k => (acc[k] ??= Array(a.length).fill(defaultValue))[i] = n[k]),
acc
), {});
<select>
<template v-for="n in options">
<option>
<slot name="option" :option="n">{{ n }}</slot>
</option>
</template>
</select>
<v-select :options="countries">
<template #option="{ option }">{{ option.name }}</template>
</v-select>
// это массив ваших "точек"
const locations = [
{ lat: ..., lng: ... },
{ lat: ..., lng: ... },
...
];
const onLoad = map => {
const bounds = new window.google.maps.LatLngBounds();
locations.forEach(n => bounds.extend(n));
map.fitBounds(bounds);
};
<GoogleMap
onLoad={onLoad}
...
>
{locations.map(n => <Marker position={n} />)}
</GoogleMap>
const useChunked = (data, chunkSize) =>
useMemo(
() => Array.prototype.reduce.call(
data,
(acc, n, i) => ((acc[i / chunkSize | 0] ??= []).push(n), acc),
[]
),
[ data, chunkSize ]
);
const ChunkedListItem = ({ item }) =>
<pre>{JSON.stringify(item, null, 2)}</pre>;
const ChunkedList = ({ items, inRow, Item = ChunkedListItem }) => {
const rows = useChunked(items, inRow);
return (
<div className="chunked-list">
{rows.map(row => (
<ul>
{row.map(n => <li><Item item={n} /></li>)}
</ul>
))}
</div>
);
}