Спасибо огромное за мега крутое объяснение! На мой взгляд, для новичков оно сложновато, но если посмотреть несколько раз, то всё становится очень понятно. Да еще и такой нетривиальный подход осветили! Я в восторге!!! Еще раз безгранично благодарю! Надеюсь, что вы не перестанете снимать такой полезный контент! Удачи!🥰
А еще можно добавить оптимизацию одну: класть значение и изменение значения в разные провайдеры(them в один провайдер, а setTheme в другой) Эта фишка вообще к любым значениям применима. Ведь есть компоненты куда мы прокидываем например setTheme, а theme нет и будут лишние ненужные перерендеры.
Это нужно для типизации. Этот восклицательный знак означает, что будет получено то значение, у которого будет элемент с индексом 0. Так как изначально мы контексту присваивали значение undefined, то естественно, что к нему мы не можем обратиться так как обращаемся к массиву. Поэтому тайпскрипт требует, чтобы мы ему точно сказали, что это будет не undefined, а массив. И проставив восклицательный знак, мы таким образом ему об этом сообщаем) Если вы пишите свой код без типизации, то этого восклицательного знака там просто не будет)