подскажите, что мне нужно подправить
function makeRequests(urls, max) {
return new Promise(resolve => {
const results = Array(urls.length).fill(null);
const groupedUrls = urls.reduce((acc, n, i) => ((acc[n] ??= []).push(i), acc), {});
const uniqueUrls = Object.keys(groupedUrls);
let countRequests = 0;
let countResponses = 0;
for (let i = 0; i < Math.max(1, Math.min(max, uniqueUrls.length)); i++) {
request();
}
function request() {
if (countResponses === uniqueUrls.length) {
resolve(results);
} else if (countRequests < uniqueUrls.length) {
const url = uniqueUrls[countRequests++];
fetch(url)
.then(result => result.json())
.catch(error => error)
.then(result => {
groupedUrls[url].forEach(n => results[n] = result);
countResponses++;
request();
});
}
}
});
}
state = {
modal: false,
}
hideModal = () => {
this.setState({ modal: false })
}
render() {
return (
...
{this.state.modal ? <Modal close={this.hideModal} /> : null}
...
);
}
return (
<div
className="modal-overlay"
onClick={e => (e.currentTarget === e.target) && props.close()}
>
<div className="modal-content">
...
</div>
</div>
);
routes: [
{
...
meta: { pageTitle: 'hello, world!!' },
},
{
...
meta: { pageTitle: 'fuck the world' },
},
...
],
<div>{{ $route.meta.pageTitle }}</div>
я знаю, что правильно менять состояние предыдущего state, то есть setState( prev => !prev ), но как это прописать для моего случая, когда предыдущее состояние должно поменять на значение item.value ?
setState(() => value)
.нажимаю кнопку Д после кнопки М и в indicator сохраняется значение кнопки М
useEffect(() => console.log('indicator: ', indicator), [ indicator ]);
$('form').on('input', function() {
$('.button').prop('disabled', $('input', this).get().some(n => !n.value));
}).trigger('input');
// или
const form = document.querySelector('form');
const button = document.querySelector('.button');
const inputs = [...form.querySelectorAll('input')];
form.addEventListener('input', () => button.disabled = !inputs.every(n => n.value));
form.dispatchEvent(new Event('input'));
methods: {
marked: (text, search) => search
? text.replace(RegExp(search.replace(/[\\^$|.*?+{}()[\]]/g, '\\$&'), 'gi'), '<mark>$&</mark>')
: text,
},
<div v-html="marked(text, search)"></div>
:asNavFor="$refs.miniPreview"
$refs
заполняются только после того, как компонент был отрисован, и они не реактивны. Это подразумевается только как обходной путь для прямого манипулирования потомками — вам следует избегать доступа к$refs
из шаблонов или вычисляемых свойств.
mounted() {
this.$nextTick(this.$forceUpdate);
},
пытаюсь пройти по списку объекта, но он почему то пустой
print(prime_number_iterator.prime_numbers)
после цикла - увидите, что значения на месте. Вы их из __next__
должны возвращать - добавьте return number
после self.prime_numbers.append(number)
. function makeRandomizer([ min, max ]) {
const numbers = [...Array(max - min + 1).keys()];
return () => numbers.length
? min + numbers.splice(Math.random() * numbers.length | 0, 1)[0]
: null;
}
function makeRandomizer([ min, max ]) {
const numbers = Array.from({ length: max - min + 1 }, (n, i) => min + i);
for (let i = numbers.length; --i > 0;) {
const j = Math.random() * (i + 1) | 0;
[ numbers[i], numbers[j] ] = [ numbers[j], numbers[i] ];
}
return () => numbers.pop() ?? null;
}
// Вот так не работает почему-то: // this.GET_HERITAGEOBJECTS_FROM_DB()
this.dispatch('GET_HERITAGEOBJECTS_FROM_DB');
// Vue ругается: error Unreachable code no-unreachable
$('#sel1').change(function() {
const min = +$(this).val();
$('#sel2')
.val((i, v) => Math.max(v, min))
.children()
.show()
.filter((i, n) => +n.value < min)
.hide();
}).change();
const select1 = document.querySelector('#sel1');
const select2 = document.querySelector('#sel2');
select1.addEventListener('change', e => {
const min = +e.target.value;
select2.value = Math.max(select2.value, min);
for (const n of select2.children) {
n.hidden = +n.value < min;
}
});
select1.dispatchEvent(new Event('change'));
filterInput.addEventListener('input', function() {
const value = this.value.toLowerCase();
filterResult.innerHTML = resultArr
.filter(n => n.toLowerCase().includes(value))
.map(n => `<li>${n}</li>`)
.join('');
});
filterInput.addEventListener('input', e => {
const value = e.target.value.toLowerCase();
filterResult.replaceChildren(...resultArr.reduce((acc, n) => {
if (n.toLowerCase().indexOf(value) !== -1) {
(acc[acc.length] = document.createElement('li')).textContent = n;
}
return acc;
}, []));
});
filterInput.addEventListener('input', () => {
const value = filterInput.value.toLowerCase();
const r = resultArr.filter(n => ~-n.toLowerCase().split(value).length);
const c = filterResult.children;
for (; c.length > r.length; filterResult.lastElementChild.remove()) ;
for (; c.length < r.length; filterResult.append(document.createElement('li'))) ;
r.forEach((n, i) => c[i].innerText = n);
});
<v-treeview>
<template #label>
<v-text-field />
</template>
</v-treeview>