Автор оригинала: FreeCodeCamp Community Member.
Кельвин Май
Поэтому я, наконец, решил вернуться к FreeCodeCamp и попытаться завершить свой сертификат развития передней части. Я уже закончил все алгоритмы и учебные пособия ранее в прошлом году, и единственное, что не хватало пропавших пропавших проектов.
Но теперь, когда у меня больше опыта работы в качестве полного разработчика стека, большинство проектов немного легко для моего текущего уровня. Поэтому у меня было два варианта. Я мог бы либо вернуться к основам и заканчивать их все за день, или я мог бы убить двух птиц одним камнем: повеселиться и экспериментировать с технологией, работая над этими проектами. Я выбрал последнее.
Но давайте сделаем это три птица – потому что я хочу некоторое время написать учебное пособие/руководство. Сегодня, что мы собираемся решать, это Показать местную погоду проект. Но на этот раз он собирается объединить React и Tymdercript! Вы можете взглянуть на готовый код в этом Github Repo , а также живая демонстрация здесь Отказ
Фон
Итак, первое первое: почему я хочу сделать это? Ну вот вещь: я прыгал назад и вперед с угловым углом 5 и на некоторое время реагирует. И мне нравится реагировать больше как рамки. Это маленький и лаконичный, но есть все функции, которые вам нужно для создания полностью функциональной приложения одной страницы. Что касается угловых, для меня далеко слишком велико, чтобы насладиться приложением так мало, как это … Но он использует TeampScript!
TypeScript – это супер набор JavaScript, который добавляет много функций, которые просто отсутствуют в JavaScript, даже при улучшении от ES6/7. Это в основном известно, что это статическое набрание. Поэтому я задавался вопросом, смогу ли я получить лучшее из обоих миров. Ответ был громким да! … Redux не включен. (Я имею в виду, что вы Can Включить Redux, но до сих пор это была боль, чтобы настроить, поэтому я не буду делать это для этого руководства.)
Для этого проекта мы собираемся сосредоточиться на голых минимум пользовательских историй, потому что мой фокус – это технология, а не любые дополнительные функции. Как таковой, API, который мы будем использовать для этого приложения, будет Wunterground . Это идеально подходит для того, что мы строим, потому что они предлагают температуру как в Фаренгейту, так и по Цельсию, а также предоставляют значки для различных погодных условий. Это означает меньше программной работы на нашем конце.
Шаг 0: Настраивать
Я буду использовать Create-React-App Для этого проекта с пользовательским программным сценарием для Teadercript, чтобы мы могли сохранить нулевую конфигурацию и простоту использования. Хорошая статья при настройке приложения raction с Teadercript была написана Trey Huffine и можно найти здесь Отказ
Я определенно предложил смотреть на этот пост для некоторых более глубоких настроек. Но без дальнейшего ADO мы собираемся запустить следующую строку в терминале.
create-react-app weather --scripts-version=react-scripts-tsnpm install --save core-decorators
Я доберусь до декораторов чуть позже. Просто знайте, что это аккуратная особенность, которую я был очень взволнован, чтобы попробовать. Но, чтобы иметь возможность использовать его, нам придется редактировать наши tsconfig.json Файл, чтобы включить экспериментальные декораторы. Для этого просто добавьте смелую линию кода.
{ "compilerOptions": {// ...code hidden... "noUnusedLocals": true, "experimentalDecorators": true } // ...more code hidden...}И так как у меня есть Прекраснее Установлено на мою среду развития, я должен был изменить мой Tslint.json файл, потому что блин противоречит с форматичностью. Если у вас есть подобное разработка, настроенная, я предлагаю просто удалить все правила Tslint так, чтобы вам не нужно было увязнуть на конфигурацию. Файл должен выглядеть так, как вы закончите.
Структура папки, которую я буду использовать, будет выглядеть следующим образом. Вы можете создавать, удалять и перемещать файлы соответственно.
weather-app/├─ .gitignore├─ node_modules/├─ public/├─ src/ └─ assets/ | - - loader.svg | - - logo.svg └─ components/ | - - Weather.tsx | - - WeatherDisplay.tsx └─ styles/ | - - App.css | - - WeatherDisplay.css | — — index.tsx | — — registerServiceWorker.ts | — — App.tsx | — — index.css | - - config.ts | - - types.ts├─ package.json├─ tsconfig.json├─ tsconfig.test.json└─ tslint.json
Хорошо, худшее закончено! Мы наконец настроили наше приложение. Давайте погрузимся в код.
Шаг 1: стиль
Я хочу сначала получить стайлинг из пути. Я не большую часть дизайнера, так что все, что я действительно сделал, был повторной коже Create-React-App Стили по умолчанию имеют зеленую тему FreeCodecamp. Кроме того, я сделал кнопку больше кнопки и, конечно, более зеленой. Вы можете смириться с этим, если вы случились, если вы будете мастером CSS. Вы также можете скачать файлы изображений здесь и поместите их в свой Активы/ папка.
Шаг 2: Хорошо, я солгал … Больше настроек
Но не волнуйтесь, это фактический код на этот раз. Сначала начнем с простой части: добавление ваших API и API клавиш. Здесь ничего нового – это выглядит точно так же, как обычный JavaScript.
Теперь для конкретной вещью Typeycts мы должны указывать типы. Ну, нам не нужно, но мы определенно должны. Причина статической печати в том, что она дает нам безопасность. В отличие от обычного JavaScript, наш код не будет запускать, если вещи имеют неправильный тип. По сути это означает, что компилятор просто отлично откажется, не позволит нам написать плохой код.
Как видите, это не слишком страшно. Просто добавьте тип после толстой кишки. Примитивные типы (строка, число, логическое значение) поддерживаются из ворот. С объектами, это хорошая идея создать новый тип, специфичный для этого конкретного объекта, как видно в WeatherData с DisplaySlocation Отказ
Теперь я был немного ленивым, потому что форма данных, приходящих от нашего API, намного больше, и я мог создать весь объект. Но я решил просто взять то, что мне нужно, и отказаться от остальных, именно поэтому это Типс Файл такой же маленький, как есть.
Шаг 3: Реагируйте – веселая часть
Я собираюсь пропустить index.tsx и App.tsx Файлы, потому что там действительно нет ничего нового. Просто знайте, что импорт отличается из-за того, насколько строгим типографии о модулях. Вместо этого мы собираемся перейти на презентационную компонент сначала.
Я все еще предпочитаю разрушать Компонент а также Фрагмент от реагирования, вместо того, чтобы звонить Реагировать. Компонент , как уменьшает избыточность. И для фрагментов, если вы никогда не играли с ними раньше, в основном это Div, который не отображается в HTML Markup.
Вы также заметите, что я добавил интерфейсы наверху. Интерфейс указывает, как следует выглядеть наш реквизит и состояние. И если вы не заметили, уловка TymbScript добавляет типы во всем, так что это происходит выше в угловых скобках <Реквизит, sta te>. Если вы знакомы с типами опоры, это делает то же самое, но я чувствую, что это намного чище.
Следующая вещь странная @ условное обозначение. Ну, это декоратор! Я изначально хотел подключить redux и подключить так, чтобы я мог показать гораздо более сложную версию, но Автобинд сделаю сейчас.
Декоратор в основном является функцией, которая обернутся вокруг класса и применяет необходимые атрибуты. Это также позволяет нам использовать Экспорт по умолчанию На вершине, что просто личное предпочтение моего.
@decorateexport default Class {}// is the same as
export default decorate(Class)
В этом случае AUTOBIND будет, поскольку имя влечет за собой, автоматически связывает это Для всего, что нам не нужно беспокоиться о проблемах связывания. И исходя из более объектно-ориентированного языка, эти методы класса будут выглядеть намного очистителя, чем работа JavaScript – вокруг функций стрелки.
classMethod = () => { console.log('when you use arrows, you don't have to worry about the keyword "this"');}classMethod () { console.log('because of javascript, you have to worry about the keyword "this" here');}И теперь, наконец, мы переходим к массу нашей логики, которая будет жить в Weather.tsx составная часть.
Первое, что вы заметите, это ? в интерфейсе. Я упомянул, что мы определенно должны определить типы для наших реквизитов, но что происходит, когда вы знаете, наверняка, это не будет определено, пока после вызова API не будет? Ну, мы можем определить необязательные типы с вопросительным знаком.
Что происходит на заднем плане, то есть переменная WeatherData разрешено быть только WeatherData Тип или undefined. Кроме того, помните, что наше WeatherData Тип – это только подраздел о том, что предлагает WunterGround. Ранее я упомянул, что мы будем принимать только данные, которые нам нужны от API – ну вот что делает этот огромный разрушитель на линии 55.
Я упоминал, что вы можете указать ожидаемые возвратные типы функций? Вот что здесь происходит с GetCurrentPosition Потому что я хотел убедиться, что это возвращает обещание.
Разумность вот что я не хотел звонить getcurrentweather До тех пор, пока у нас не было правильного геолокации, что означает, что мы имеем дело с асинхронными событиями. Async всегда означает обещания, так что это произойдет.
Слово предупреждение: нативное API геолокации займет много времени, чтобы получить результат, не проходя в любых вариантах. Я решил не добавлять варианты к нему, так как он давал мне ошибки в то время.
И я считаю, что все новые вещи, происходящие в этом приложении из-за Typescript. Все остальное должно быть знакомым, если вы знаете, реагируют. Но, надеюсь, вы можете увидеть преимущества этого сумерета, поскольку он добавляет как безопасность нашему коду, а также несколько хороших сверху.
Шаг 4: Завершите!
Ты сделал это! Вы закончили приложение, которое показывает погоду в вашей текущей позиции. И при этом вы охватил хороший кусок Tymdercript, а также включать его в реакцию.
Конечно, определенно могут быть улучшения на этом, как возможность поиска и показывать другие места. И UI определенно можно работать. Но если вы еще не закончили приложение погоды на FreeCodeCamp, вы уже ушли выше и выше на это задание.
Оригинал: “https://www.freecodecamp.org/news/weather-in-react-and-typescript-4f774fc07be7/”