Я новичок в angular и просматриваю учебник на официальном сайте. Он широко использует классы. Каждый компонент — это класс, в отличие от функциональных компонентов React. Есть ли что-то подобное в Angular?
да, а также, если можно использовать простой JS в Angular 11 вместо TypeScript.
@Abra, я полагаю, вы перепутали функциональное реактивное программирование или просто реактивное программирование с функциональным программированием.
Нет на оба вопроса.
Angular — довольно строгий фреймворк, и вам нужно следовать его правилам, компоненты реализованы с помощью классов, и это не так.
То же самое относится и к Typescript, angular в значительной степени зависит от этого, в частности, от декораторов, он не может работать с простым JS.
Вы также используете неправильный термин здесь (по крайней мере, с точки зрения Angular), есть что-то, называемое функциональным программированием, в ОЧЕНЬ простых терминах это в основном означает, что вы избегаете императивного кода, такого как for(let i=0; i< array.length; i++)
, для более функционального подхода, такого как array.forEach
.
Если вам интересно, вы можете узнать больше о функциональном программировании в Angular в этом посте среднего уровня: Функциональное программирование простыми словами
Я также хотел бы добавить, что React начинался со стандартных компонентов класса, а функциональные компоненты можно было использовать для более простых элементов. Теперь, особенно с добавлением хуков и внутренних улучшений производительности, я считаю, что они пытаются сделать функциональные компоненты стандартом (что мне, честно говоря, нравится). В общем, я предполагаю, что в будущем у реакции будут только функциональные компоненты, а классовые можно будет увидеть только в унаследованном коде. Так что функциональные компоненты — это что-то вроде реакции, насколько я могу судить, их нет даже у Vue.
да, извините за длинный комментарий, я просто хотел упомянуть, что я считаю, что функциональные компоненты — это довольно специфическая функция реагирования, поэтому вам не следует ожидать, что вы увидите их где-то еще.
Что касается Typescript, то именно так был построен Angular, и он является неотъемлемой частью фреймворка, но React и Vue также предлагают поддержку TS. TS становится все более популярным и распространенным, поэтому я думаю, что вам не следует избегать его, а просто воспользуйтесь этой возможностью, чтобы изучить его, так как он все равно вам пригодится в будущем :)
разве вы не хотели написать «императивное» вместо «декларативное»?
Использование цикла for «не работает»? Я думал, что функциональное программирование просто означает, что вы полагаетесь на (чистые и неизменяемые) функции для повторного использования кода, а не на классы и наследование.
@ShacharHar-Shuv Определение функционального программирования, на мой взгляд, не полностью определено, и разные люди могут иметь немного разные представления о том, что это значит, с моей точки зрения, я бы определенно сказал, что циклы «for» являются типичными императивными операциями, пока forEach
используется функциональный подход. Чтобы получить больше информации о разнице, загляните сюда: learn.microsoft.com/en-us/dotnet/standard/linq/…
в моей предыдущей ссылке я думаю, что следующее предложение довольно хорошо резюмирует аргумент: «При императивном подходе разработчик пишет код, который определяет шаги, которые компьютер должен предпринять для достижения цели. Это иногда называют алгоритмическим программированием. Напротив, функциональный подход предполагает составление проблемы как набора функций, которые необходимо выполнить». (и в нашем случае вы можете видеть, что это указывает на разницу в указании js выполнять итерацию через поиск for по сравнению с составом функции forEach
с ее аргументом)
Я просто хочу добавить, что .forEach
часто используется как пример «функционального подхода». forEach
хорош только для побочных эффектов, что означает, что на самом деле это очень плохой пример, поскольку вы пытаетесь изолировать побочные эффекты и сохранить их в как можно меньшем количестве мест. Лучшим примером является цикл for с Array.push и простой Array.map.
В npm есть библиотека под названием angular-function-component
. Хотя это всего лишь функциональная оболочка для компонента класса. И да, Angular, похоже, использует в основном ООП-подход.
Раньше я работал со старым AngularJS, но недавно у меня появилась возможность снова посетить Angular. Судя по их объявлению Component
, функциональное программирование, вероятно, не рекомендуется.
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'learn-angular';
}
Вышеупомянутый класс является производным от базы Component
, но это класс. Это заставило меня подумать, что он также не будет поддерживать хуки. Я имею в виду хук React, а не сервисный хук.
Конечно, поддержка функционального программирования Javascript все еще существует, что не имеет ничего общего с Angular, например, arr.map
.
Вы спрашиваете, поддерживает ли Angular функциональное программирование?