const letters = {
'а': 'a',
'б': 'b',
'в': 'v',
...
};state = {
value: '',
translitValue: '',
}onChange = ({ target: { value } }) => {
this.setState({
value,
translitValue: value.toLowerCase().split('').map(n => letters[n] || n).join(''),
});
}<input value={this.state.value} onChange={this.onChange} />
<input value={this.state.translitValue} readOnly />
data: () => ({
filters: [ 'ArmorProtective_LowerBody', 'ArmorProtective_Head' ],
activeFilter: null,
...
computed: {
filteredHeads() {
const f = this.activeFilter;
return f
? this.heads.flatMap(n => n[f]).filter(Boolean)
: [];
},
...<a v-for="f in filters" @click="activeFilter = f">{{ f }}</a>
...
<div v-for="head in filteredHeads">
...
const items = [
{ title: 'London', content: 'London is the capital city of England.' },
{ title: 'Paris', content: 'Paris is the capital of France.' },
{ title: 'Tokyo', content: 'Tokyo is the capital of Japan.' },
];const TabContent = ({ title, content }) => (
<div className="tabcontent">
<h3>{title}</h3>
<p>{content}</p>
</div>
);function Tabs({ items }) {
const [ active, setActive ] = React.useState(null);
const openTab = e => setActive(+e.target.dataset.index);
return (
<div>
<div className="tab">
{items.map((n, i) => (
<button
className={`tablinks ${i === active ? 'active' : ''}`}
onClick={openTab}
data-index={i}
>{n.title}</button>
))}
</div>
{items[active] && <TabContent {...items[active]} />}
</div>
);
}
emit из дочернего компонента, v-on из родительского. Параметр list - заменить статическую передачу значения на динамическую: :list="{{ json_encode($tasks) }}". Так переданное значение будет рассматриваться не как строка, а в качестве javascript выражения - применять JSON.parse не нужно.
const str = arr
.map(n => `${n.charAt(0).toUpperCase()}${n.slice(1)}`)
.join(', ');
// или
const str = arr.reduce((acc, n, i) => {
return acc + (i ? ', ' : '') + n.replace(/./, m => m.toUpperCase());
}, '');
// или
const str = ''.concat(...arr.flatMap(([ c = '', ...n ], i) => {
return [ i ? ', ' : '', c.toUpperCase(), ...n ];
}));
есть массив индексов[0, 3, 1, empty, 2]
<...>
должно быть -[100, 400, 200, empty, 300]
for (let i = 0; i < indexes.length; i++) {
if (indexes.hasOwnProperty(i)) {
arr.push(arr[indexes[i]]);
} else {
arr.length++;
}
}
arr.splice(0, arr.length - indexes.length);arr.splice(0, arr.length, ...indexes.map(i => arr[i]));
ol на transition-group:<transition-group tag="ol" name="todo">
<li
v-for="(todo, i) in todos"
:key="todo.id"
@click="todos.splice(i, 1)"
>{{ todo.text }}</li>
</transition-group>li {
transition: all 0.7s;
}
.todo-leave-active {
position: absolute;
}
.todo-leave-to {
transform: translateX(500px);
opacity: 0;
}
:class="{ 'authorization__label--done': name }"
:class="{ 'authorization__label--done': password }"
const className = 'carusel__item_active';.const hasClass = el => el.classList.contains(className);
// или
const hasClass = el => el.matches(`.${className}`);
// или
const hasClass = el => el.className.split(' ').includes(className);
// или
const hasClass = el => RegExp(`(^| )${className}( |$)`).test(el.classList.value);const activeSlide = Array.prototype.find.call(items, hasClass);
// или
let activeSlide = null;
for (const n of items) {
if (hasClass(n)) {
activeSlide = n;
break;
}
}
// или
const [ activeSlide ] = [...items].filter(hasClass);
// или
let activeSlide = null;
for (let i = 0; i < items.length && !activeSlide; i++) {
activeSlide = hasClass(items[i]) ? items[i] : activeSlide;
}
// или
let activeSlide = items[0];
while (activeSlide && !hasClass(activeSlide)) {
activeSlide = activeSlide.nextElementSibling;
}
// или
const activeSlide = (function get(i, n = items.item(i)) {
return (!n || hasClass(n)) ? n : get(-~i);
})(0);
function onMarkerClick(e) {
map.setZoom(8);
map.panTo(e.latLng);
}
for (const f of features) {
const marker = new google.maps.Marker({
position: f.position,
icon: icons[f.type].icon,
map,
});
marker.addListener('click', onMarkerClick);
}
this.setState({async componentDidMount() {
for (const url of urlList) {
const
dataAPI = [ ...this.state.dataAPI, await servicesAPI.getResourse(url) ],
loaded = dataAPI.length === urlList.length;
await new Promise(r => this.setState({ dataAPI, loaded }, r));
}
}
const input = document.querySelector('input');
const buttons = document.querySelectorAll('button');
buttons.forEach(n => n.addEventListener('click', onClick));const classes = [
[ 'id1', 'class1' ],
[ 'id2', 'class2' ],
[ 'id3', 'class3' ],
];
function onClick() {
classes.forEach(n => input.classList.toggle(n[1], n[0] === this.id));
}<button data-class="class1">click me</button>
<button data-class="class2">click me</button>
<button data-class="class3">click me</button>function onClick() {
buttons.forEach(n => input.classList.toggle(n.dataset.class, n === this));
}
в product.vue делаю при клике <...> в product.vue все норм выводит, в shop.vue hover = null
const count = (max, timeout) =>
(function next(i) {
if (i <= max) {
setTimeout(() => {
console.log(i);
next(++i);
}, timeout(i));
}
})(0);
count(100, i => i * 5);