function randomSets(boxSizes, z) {
const blocks = [];
for (let i = 0; i < z; ++i) {
blocks.push(i);
}
// random shaffle
for (let i = blocks.length - 1; i > 0; --i) {
const pos = Math.floor(Math.random() * (i + 1));
const t = blocks[pos];
blocks[pos] = blocks[i];
blocks[i] = t;
}
const arr = [];
const counts = [];
const result = [];
let count = 0
for (let i = 0; i < boxSizes.length; ++i) {
result.push([]);
const y = boxSizes[i];
arr.push(i);
counts.push(y);
count += y;
}
let len = arr.length;
for (let i = 0; i < z && count > 0; ++i, --count) {
const pos = Math.floor(Math.random() * len);
result[arr[pos]].push(blocks[i]);
if (--counts[pos] < 1) {
--len;
arr[pos] = arr[len];
counts[pos] = counts[len];
}
}
return result;
}
Вот это непонятно.
useEffect(() => {
socket.on('getPrevMessages', data => {
setPrevMessages(prev => [...prev, ...data]);
});
}, [])
А для чего в вашем примере использование useCallback? Не излишне?
Там было 2 кнопки которые увеличивают и уменьшают число. Типичная минипрограммка, что бы понять как что и откуда берет redux.