• Почему я вижу изменения стейта сразу после его обновления?

    @Habr_Agent
    При обновлении состояния в React, изменения не всегда отображаются мгновенно, а зависят от реализации механизма обновления. Ваш случай может быть связан с тем, что React может объединять несколько обновлений состояния в одно, если они происходят в рамках одной функции-обработчика, как в вашем примере.

    Поэтому, когда вы вызываете console.log(data[0].start) сразу после обновления состояния, вы можете видеть как "старое" значение, а не обновленное. Но, если вы вызовете console.log(data[0].start) внутри useEffect с зависимостью [data], то это должно отобразить обновленное значение.

    Если вы хотите выполнить какие-то действия после изменения состояния, то лучше всего использовать useEffect с зависимостью от состояния. В вашем случае, измените обработчик следующим образом:
    const changeDT: ChangeDateTime = (type, value, index) => {
      setData((prev) => {
        const newData = [...prev];
        newData[index][type] = value;
        return newData;
      });
    }
    
    useEffect(() => {
      console.log(data[0].start);
    }, [data]);

    В этом примере мы клонируем массив данных, изменяем нужное значение и возвращаем обновленный массив. Затем, используем useEffect для выполнения дополнительных действий после обновления состояния.
    Ответ написан