key
. key
. Нужно что-то уникальное, характерное для каждого элемента массива, что не изменится при изменении порядка, скажем.arr.map(el => <TimerComponent name={el} key={el} />)
Ну и массивы в стейте, помните, надо не мутировать, а заменять массив целиком на новый.import React, { useState } from 'react';
export function App(props) {
const [value, setValue] = useState( '');
const [bg, setBg] = useState('red');
const handleChange = event => {
setValue(event.target.value);
if(value.length < 5 || value.length>50){
setBg('red')
}
else{
setBg('')
}
};
return (
<div className='App'>
<input
type='text'
value={value}
onChange={handleChange}
style={{ backgroundColor: bg}}
/>
<pre>{value}</pre>
</div>
);
}
const [posts, setPosts] = useState([]);
setPosts(fetchReq);
const fetchReq = fetch(`${fetchURL}/posts`).then(res => res.json());
fetch(`${fetchURL}/posts`)
.then(r => r.json())
.then(setPosts);
То есть что условно лучше - огромная таблица с кучей строк или же большое количество таблиц в бд?
value
.- let input = document.getElementsByClassName('form-control');
+ const input = document.querySelector('input.form-control');
const makeDate = HHMM => {
const [H, M] = HHMM.split(':').map(Number);
const D = new Date();
D.setHours(H);
D.setMinutes(M);
D.setSeconds(0);
return D;
};
const oo = n => n.toString().padStart(2, '0'); // 5 => '05'
const fillTime = (startHHMM, finishHHMM, intervalMinutes) => {
let startDate = makeDate(startHHMM);
let finishDate = makeDate(finishHHMM);
if (startDate > finishDate) { // объекты Date можно так сравнивать
[startDate, finishDate] = [finishDate, startDate]; // поменять местами
}
const dates = [];
const D = new Date(startDate);
while (D <= finishDate) {
dates.push(new Date(D));
D.setMinutes(D.getMinutes() + intervalMinutes);
}
return dates.map(D => [D.getHours(), D.getMinutes()].map(oo).join(':'));
};
console.log(fillTime('15:56', '18:15', 17));
// [ "15:56", "16:13", "16:30", "16:47", "17:04", "17:21", "17:38", "17:55", "18:12" ]