Рубрики
Без рубрики

Легкие приложения с HyperHTML – 8, async loading

Часть 8, написанная Ivan Standard Geek … Помечено JavaScript, HyperhTML, учебник, WebDev.

Часть 8, написанная

Иван

Pinguxx Pinguxx.

Пол Томпсон

парито

  1. Введение, провод/связывание
  2. События и компоненты
  3. Моар о компонентах и простое государственное управление
  4. Типы проводов и пользовательские определения (напряжение)
  5. Пользовательские элементы с гипер
  6. Настройка моих пользовательских элементов
  7. Тестирование!
  8. Async Loading, заполнитель и Typeabead с Hyper
  9. Обработка маршрутов
  10. 3-я партийные библиотеки

Есть несколько распространенных проблем, с которыми мы имеем дело с рутинной основой, когда чистить зубы, будь то 3-дневная пицца, сидящая на стойке, все еще хороши, и как показать пользователей, что что-то происходит, когда происходит, не может быть видимый. А в мире, управляемый данными, мы часто хотим фильтровать, чтобы данные только могли видеть, что мы хотим. Мы не сможем помочь вам с чистить зубами или привычками есть, но мы можем сделать что-то о других проблемах.

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

Итак, давайте построим небольшое приложение, которое решает эти проблемы. Для этой части мы собираемся показать список лучших 10 криптокунов и преобразования в другую валюту. Мы будем использовать Криптокомпаре API, вы можете прочитать документацию здесь Отказ Вам не нужно изучать полный API, если вы не хотите, просто следуйте.

Это то, что мы собираемся построить:

Фильтр в правом верхнем углу, чтобы выбрать скорость, чтобы показать.

Таблица с топ-10 монетами и скоростью.

Кнопка, чтобы обновить топ-10.

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

Typeabead

Typeeads – сложные элементы. Для нашего текущего проекта мы будем использовать упрощенный Typeapead. Обычно нам нужно намного больше кода, чтобы сделать этот элемент завершенным, но на данный момент упрощенная версия будет работать. Всякий раз, когда пользователь фокусируется на выпадающем раскрывающемся списке, введите, вы вводите и в списке фильтры, щелкнув на одном из вариантов, и вы получаете выбранную опцию, и в этот момент мы запускаем и на мероприятии с изменением.

Обязательно проверьте этот код тщательно, так как мы не будем глубины об этом здесь.

Примечания на Typeaphead код:

  • Мы определили Get/Set для опций, чтобы позволить пользователю пропускать параметры. Мы используем внутреннюю переменную для их хранения. Это помогает избежать петлей, если мы когда-нибудь хотим установить варианты в нашем коде.
  • Мы используем классы Bootstrap для стилизации. DropDown-Menu – право на то, чтобы выпадать нашего Typeaphadeead на экране виден.
  • Функции Open () и Close () будут устанавливать состояние, поэтому, когда мы следующим визуализируем, наши Typeabead получит правильный класс CSS, чтобы показать или скрыть. Помните, каждый раз, когда мы называем SetState HyperHTML повторно рендерирует наш элемент.
  • Мы редаем вход, который будет внутри нашего элемента. Это очень распространено с пользовательскими элементами – обернуть родной элемент в нашем элементе. Делая это, это так, как будто мы расширяем родной элемент с дополнительными функциями.
  • Мы не используем ( или нужно! ) частичные атрибуты. Вот почему нам нужно обернуть класс внутри $ {}.
  • Мы отображаем все варианты, которые мы находим и возвращаем провод () для каждого. Возвращая провод () важно; В противном случае HyperHTML не сможет прикрепить узлы DOM.
  • События Давайте прослушиваем щелчки на вход и откройте раскрывающуюся и щелкнули на корпус, чтобы закрыть его.

Прежде чем мы сможем использовать TypeAhead, нам нужно импортировать его в Index.js

// index.js
import "./Typeahead.js";

const input = document.querySelector("hyper-input");

И поместите пользовательский элемент в HTML:

С базовым типовым адресом выходит из пути, пришло время извлечь список монет. Cryptocompare FTW. Мы сделаем привлечение здесь в index.js и проходим части ответа на нашу Typeead.

const input = document.querySelector("hyper-input");

fetch(`https://min-api.cryptocompare.com/data/all/coinlist`)
 .then(b => b.json())
 .then(data => {
 input.options = data.Data;
 });

Мы должны начать варианты с пустым массивом, поэтому мы не получаем неопределенные ошибки.

// typeahead.js
created() {
 this.options = [];
}

Теперь давайте посмотрим на стол.

Стол

Cryptocompare имеет конечную точку, чтобы получить ряд лучших монет по общему объему на всех рынках за последние 24 часа. Мы будем использовать это, чтобы установить наши данные таблицы, поэтому давайте обновим index.js, чтобы сделать это.

fetch(`https://min-api.cryptocompare.com/data/top/totalvol?limit=10&tsym=USD`)
 .then(b => b.json())
 .then(data => {
 table.data = data.Data.map(coin => coin.CoinInfo);
 });

Стол пуста. Нам нужно обновить HTML, чтобы нацелиться на реальные атрибуты


 
 
 

У нас на самом деле у нас нет атрибута данных, но мы увидим, почему скоро.

Если мы перезагрузим страницу, мы видим, таблица пуста, а затем внезапно у нас есть 10 лучших монет в таблице. Мы должны показать некоторую загрузку текста, чтобы люди знали, что происходит. Хорошее место для этого внутри <Тобб> нашего элемента таблицы.

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

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

static get observedAttributes() {
 return ["coin"];
}

В нашем _rendercell Функция, давайте проверим, являются ли данные атрибутом, которые мы отображаем, а затем используем функциональность заполнителя HyperHTML. Таким образом, мы можем показать некоторую загрузку текста во время загрузки, а afteward, скорость для монеты.

В этом коде много происходит много. Мы в первую очередь столкнулись с проводами, которые выглядят так:

return wire()`
`

Однако в вышеуказанном коде обратите внимание, что мы даем проволоку слабую карту и идентификатор: провод (элемент, : COL $ {товар. Id} ) Hyper будет использовать это для более эффективного использования и рендеринга проводов. Кроме того, для этого провода мы проходим объект вместо HTML. Обратите внимание, что «любое» недвижимость – это обещание, которое возвращает провод, а свойство «заполнителя» – это провод. Hyper будет использовать то, что находится в недвижимости для заполнения до тех пор, пока не будет выполнено обещание. Всякий раз, когда выбирается, мы возвращаем скорость, и Hyper удалит провод заполнителя и обновить наш элемент с новой информацией. Довольно круто!

Успех! Мы видим нашу таблицу, загружаю монеты, затем сделав еще 10 запросов, чтобы получить скорость для каждой монеты.

Положить все вместе

Следующим шагом является подключение входа со столом, мы сделаем это в Index.js

input.addEventListener("change", e => {
 table.coin = input.value;
 table.render();
});

Каждый раз, когда наши изменения ввода, мы будем обновлять монету настольную таблицу с новым значением и перезарядкой таблицей, которая сделает столбец RATE, создаст новые запросы с новой монетой и показать новые данные: D.

О нет, мы теряем сортировку всякий раз, когда мы обновляем данные … вроде имеет смысл, поскольку это новые данные. Чтобы исправить это, давайте переместим сортировочную часть вне нашего HeaderClick к своей функции, и всякий раз, когда мы добавляем новые данные, мы просто повторно сортируем.

Хорошо! Наконец, для нашего стола мы введем последнее обновление в нижнем колонтитуле. У нас уже есть зона намерения, но для этого мы хотим также показать время. Делать наценок DateTime поможет нам с этим

Очень похоже на наш предыдущий Но теперь мы тоже покажи время.

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

set data() {
 this._last = Date.now()
 ...
}

И конечно, нижний колонтитул сейчас выглядит так

Код до сих пор

Освежать

Поскольку топ-10 изменяется достаточно часто, давайте добавим кнопку обновления. С помощью этой кнопки таблица может быть обновлена без обновления всей страницы.

Во-первых, index.html, под гипер-таблицей

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

Вот и все! Нажав на обновление обновления таблицы, и мы видим новую временную метку в нижнем колонтитуле.

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

Одна последняя o Rly Book: D

Оригинал: “https://dev.to/pinguxx/easy-apps-with-hyperhtml-8-async-loading-5d96”