Подскажите самые простые учебники / статьи / видео курсы по React, где нормальным языком доступно объясняется.
На офф сайте читал и мануалы и практическое руководство, тяжело очень дается и порой не понтно что к чему и зачем.
фразы оттуда навроде "Подъём состояния в родительский компонент — обычное дело при рефакторинге React-компонентов." лишь отпугивают новичков вроде меня
C javascript знаком на базовом уровне
v-html
надо её компилировать как шаблон компонента, как-то так:<component :is="getComponent(text)"></component>
methods: {
getComponent(text) {
return Object.assign(Vue.compile(`<div>${this.getMessageHtml(text)}</div>`), {
methods: {
// сюда пробрасываете нужный вам обработчик клика
},
});
},
...
<div v-html="getMessageHtml(text)" @click="onClick"></div>
methods: {
onClick(e) {
if (e.target.tagName === 'BUTTON') {
// убедились, что клик был по кнопке - теперь делайте чего там вам надо
}
},
...
document.addEventListener('click', e => {
const btn = e.target.closest('.more-btn');
for (const n of document.querySelectorAll('.more-btn')) {
n.classList.toggle('active', n === btn && !n.classList.contains('active'));
}
// или
document.querySelectorAll('.more-btn').forEach(function(n) {
n.classList[n === this ? 'toggle' : 'remove']('active');
}, e.target.closest('.more-btn'));
});
Если нам нужно прокинуть данные от родителя к ребенку на сколь угодно глубокий уровень, мы можем воспользоваться provide/inject
, а если нам надо в обратную сторону?
function weightedRandom(arr, key = () => 1) {
const val = key instanceof Function ? key : n => n[key];
const max = arr.reduce((acc, n) => acc + val(n), 0);
return () => {
let rand = Math.random() * max;
return arr.find(n => (rand -= val(n)) < 0);
};
}
const getRandomPhotosArray = weightedRandom([
[ 9, truePhotos ],
[ 1, funnyPhotos ],
], 0);
function getPhoto() {
const photos = getRandomPhotosArray()[1];
return photos[Math.random() * photos.length | 0];
}
new ApexCharts(..., {
...
tooltip: {
...
y: {
title: {
formatter: (seriesName, seriesData) => ...,
},
formatter: (value, seriesData) => ...,
},
},
});
<div class="tab" @click="$router.push('/')">
router-link
. Там добавление класса уже реализовано, осталось только стили ему прописать. $values = array_combine(
array_column($example2, 'SECTION_ID'),
array_column($example2, 'VALUE')
);
$example3 = array_map(function($n) use($values) {
$n['VALUE'] = $values[$n['SECTION_ID']];
return $n;
}, $example1);
{
title: data.title,
deadLineTimestamp: new Date(data.deadLine).getTime(),
description: data.description,
}
function createTreeFromArray(arr, key, parentKey) {
const tree = Object.fromEntries(arr.map(n => [ n[key], { ...n } ]));
return Object.fromEntries(Object.entries(tree).filter(([ , n ]) => {
return !(tree[n[parentKey]] && ((tree[n[parentKey]].children ??= {})[n[key]] = n));
}));
}
const tree = createTreeFromArray(arr, 'uid', 'parentUID');
И со слотами, и без слотов, и как только не пытался уже.