Статьи

Как создать приложение новостей с Svelte

Svelte — это новая библиотека JavaScript UI, которая во многом похожа на современные библиотеки UI, такие как React. Одним из важных отличий является то, что он не использует концепцию виртуального DOM.

В этом уроке мы представим Svelte, создав информационное приложение, вдохновленное Daily Planet , вымышленной газетой из мира Супермена.

О Славте

Svelte использует новый подход к созданию пользовательских интерфейсов. Вместо того, чтобы выполнять необходимую работу в браузере, Svelte переводит эту работу в фазу компиляции, которая происходит на компьютере разработчика при создании приложения.

В двух словах, так работает Svelte (как указано в официальном блоге ):

Svelte работает во время сборки , превращая ваши компоненты в высокоэффективный императивный код, который хирургически обновляет DOM. В результате вы можете писать амбициозные приложения с отличными характеристиками производительности.

Svelte работает быстрее, чем самые мощные фреймворки (React, Vue и Angular), потому что он не использует виртуальный DOM и хирургически обновляет только те части, которые меняются.

Мы узнаем об основных понятиях, таких как компоненты Svelte, и о том, как извлекать и перебирать массивы данных. Мы также узнаем, как инициализировать проект Svelte, запустить локальный сервер разработки и собрать окончательный комплект.

Предпосылки

У вас должно быть несколько предварительных условий, чтобы вы могли комфортно следовать этому руководству, например:

  • Знакомство с HTML, CSS и JavaScript (ES6 +),
  • Node.js и npm установлены на вашем компьютере разработчика.

Node.js может быть легко установлен с официального сайта или вы также можете использовать NVM для простой установки и управления несколькими версиями Node в вашей системе.

Мы будем использовать JSON API в качестве источника новостей для нашего приложения, поэтому вам нужно получить ключ API, просто создав бесплатную учетную запись и отметив ключ API.

Начиная

Теперь давайте начнем создавать наше новостное приложение Daily Planet, используя инструмент degit для генерации проектов Svelte.

Вы можете либо установить degit глобально в своей системе, либо использовать инструмент npx для запуска его из npm. Откройте новый терминал и выполните следующую команду:

 npx degit sveltejs/template dailyplanetnews 

Затем перейдите в папку вашего проекта и запустите сервер разработки, используя следующие команды:

 cd dailyplanetnews npm run dev 

Ваш dev-сервер будет прослушивать с адреса http://localhost:5000 . Если вы внесете какие-либо изменения, они будут перестроены и обновлены в вашем запущенном приложении.

Откройте файл main.js вашего проекта, и вы должны найти следующий код:

 import App from './App.svelte'; const app = new App({ target: document.body, props: { name: 'world' } }); export default app; 

Именно здесь приложение Svelte загружается путем создания и экспорта экземпляра корневого компонента, условно называемого App . Компонент берет объект с target и props атрибутами.

target содержит элемент DOM, в который будет смонтирован компонент, а props содержат свойства, которые мы хотим передать компоненту App . В данном случае это просто имя с мировым значением.

Откройте файл App.svelte , и вы должны найти следующий код:

 <script> export let name; </script> <style> h1 { color: purple; } </style> <h1>Hello {name}!</h1> 

Это корневой компонент нашего приложения. Все остальные компоненты будут дочерними для App .

Компоненты в Svelte используют расширение .svelte для исходных файлов, которые содержат все JavaScript, стили и разметку для компонента.

Имя export let name; Синтаксис создает компонент проп с именем name . Мы используем переменную интерполяцию — {...} — для отображения значения, переданного через имя prop.

Вы можете просто использовать старый добрый JavaScript, CSS и HTML, с которым вы знакомы, для создания компонентов Svelte. Svelte также добавляет в HTML некоторый синтаксис шаблона для интерполяции переменных и циклического перемещения по спискам данных и т. Д.

Поскольку это небольшое приложение, мы можем просто реализовать необходимые функции в компоненте App .

В <script> импортируйте метод onMount() из «svelte» и определите API_KEY , API_KEY и URL которые будут содержать ключ API новостей, API_KEY articles новостей и конечную точку, которая предоставляет данные:

 <script> export let name; import { onMount } from "svelte"; const API_KEY = "<YOUR_API_KEY_HERE>"; const URL = `https://newsapi.org/v2/everything?q=comics&sortBy=publishedAt&apiKey=${API_KEY}`; let articles = []; </script> 

onMount — это метод жизненного цикла. Вот что говорит официальный учебник об этом:

Каждый компонент имеет жизненный цикл, который начинается при его создании и заканчивается при его уничтожении. Существует несколько функций, которые позволяют запускать код в ключевые моменты этого жизненного цикла. Наиболее часто используемым является onMount , который запускается после первой визуализации компонента в DOM.

Далее, давайте использовать API извлечения для извлечения данных из конечной точки новостей и сохранения статей в переменной article, когда компонент монтируется в DOM:

 <script> // [...] onMount(async function() { const response = await fetch(URL); const json = await response.json(); articles = json["articles"]; }); </script> 

Поскольку метод fetch() возвращает обещание JavaScript, мы можем использовать синтаксис async / await, чтобы код выглядел синхронно и исключал обратные вызовы.

Далее, давайте добавим следующую HTML-разметку для создания пользовательского интерфейса нашего приложения и отображения данных новостей:

 <h1> <img src="https://dailyplanetdc.files.wordpress.com/2018/12/cropped-daily-planet-logo.jpg?w=656&h=146" /> <p class="about"> The Daily Planet is where heroes are born and the story continues. We are proud to report on the planet, daily. </p> </h1> <div class="container"> {#each articles as article} <div class="card"> <img src="{article.urlToImage}"> <div class="card-body"> <h3>{article.title}</h3> <p> {article.description} </p> <a href="{article.url}">Read story</a> </div> </div> {/each} </div> 

Мы используем each блок для зацикливания новостных статей и отображаем title , description , url и urlToImage каждой статьи.

Логотип ежедневной планеты и заголовок взяты из этой некоммерческой новостной организации , вдохновленной DC Comics.

Мы будем использовать Kalam, рукописный шрифт, доступный в Google fonts , поэтому откройте файл public/index.html и добавьте следующий тег:

 <link href="https://fonts.googleapis.com/css?family=Kalam" rel="stylesheet"> 

Затем вернитесь в файл App.svelte и добавьте следующие стили:

 <style> h1 { color: purple; font-family: 'kalam'; } .container { display: grid; grid-template-columns: repeat(auto-fill, minmax(305px, 1fr)); grid-gap: 15px; } .container > .card img { max-width: 100%; } </style> 

Это скриншот нашего ежедневного новостного приложения:

Скриншот нашего ежедневного новостного приложения

Здание для производства

После разработки приложения вы можете создать производственные пакеты, выполнив команду build в своем терминале:

 npm run build 

Команда создаст минимизированный и готовый к работе пакет, который вы можете разместить на предпочитаемом хостинг-сервере.

Теперь давайте разместим приложение, используя ZEIT Now .

ZEIT Now — это облачная платформа для веб-сайтов и бессерверных функций, которую вы можете использовать для развертывания своих проектов в .now.sh или в личном домене.

Вернитесь к своему терминалу и выполните следующую команду для установки CLI Now:

 npm install -g now 

Затем перейдите в public папку и выполните команду now :

 cd public now 

Это оно! Ваше приложение будет развернуто в облаке. В нашем случае это доступно из public-kyqab3g5j.now.sh .

Вы можете найти исходный код этого приложения в этом репозитории GitHub .

Вывод

В этом уроке мы создали простое новостное приложение с использованием Svelte. Мы также увидели, что такое Svelte и как создать проект Svelte с помощью инструмента degit из npm.

Вы можете обратиться к официальным документам за подробным руководством, чтобы узнать о каждой функции Svelte.