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

Учебник начинающих для PreaCt – Часть 3: JSX

Мы видели на предыдущей части, как сделать его намного проще создать контент от JavaScript, однако мы … Tagged с JavaScript, Teamscript, JSX, учебником.

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

Текущий H Функция имеет много лота для этого. Это создает дерево элементов DOM на лету, таким образом, что это кратко и не так разное визуально, чем дерево, которое он генерирует.

Тем не менее, все, что «функциональные звонки» быстро станут глазоми, а навигационная клавиатура – навигационные сложные элементы быстро становится умственно напряженным. Что если я сказал вам, мы можем вернуть HTML обратно в JavaScript?

Это именно то, что такое JSX. Это позволяет разработчикам написать H Функция вызовов в HTML-ESQUE (или, скорее, XML-ESQUE). Не только стоит писать, но код JSX подчеркивает данные и структуру более четко, чем беспорядок функциональных вызовов любые регулярно-размеры кода.

На что это похоже? Давайте пересмотрим наш проект от последней части:

const root = (
  

My custom-generated web page

How neat is that?

That's pretty neat.

); // Prepending here because scripts should ideally be at the end of the body document.body.prepend(root);

Мы можем четко видеть, как этот «простой синтаксический сахар» сразу улучшил читаемость нашей функции.

Если вы попытаетесь использовать наш настолько на заказ H Функция (больше на этом позже), однако, вы увидите следующую ошибку:

TypeError: Can't convert null to object

Это связано с тем, что когда тег не имеет никакого атрибута в JSX, вместо того, чтобы пройти пустой объект в качестве аргумента, преобразованные JS использует нулевой вместо. Нам нужно объяснить это и проверять на нуле перед применением атрибутов:

/**
 * Creates an element and returns it
 * @param tag Tag name, like the HTML tag
 * @param attrs Object of attributes to add to the node
 * @param children Children nodes to append into the created element
 */
function h(
  tag: string,
  attrs: object | null,
  ...children: (HTMLElement | string)[]
) {
  const el = document.createElement(tag);

  // **ADDED**: Append given attributes (if defined)
  if (attrs !== null)
    for (const key of Object.keys(attrs)) {
      el.setAttribute(key, attrs[key]);
    }
  // Insert children
  for (const child of children) {
    // Text is special in the DOM, we must treat it accordingly
    if (typeof child === "string") {
      el.appendChild(document.createTextNode(child));
    } else {
      el.appendChild(child);
    }
  }
  return el;
}

Проблема с JSX, состоит в том, что вы не можете использовать его напрямую. Если вы сделаете, ваш JavaScript Engine выбор будет жаловаться – потому что JSX не является частью языка JavaScript – это трюк, размещенный на вершине JavaScript, чтобы помочь с написанием вложенного H Функции. Это где находится Бабел.

У Babel есть плагины, чтобы включить ваш JSX в функциональные вызовы H, что по очереди делает JavaScript Daight снова. Правильное введение в Вавиле не в области применения здесь, и если вы не знаете о Babel, вы обязательно должны проверить это, так как он стал частью повседневной инструментации разработчика JavaScript.

Другое решение для включения jsx, приведен к типографии. TS Transpiler имеет поддержку JSX, и вы можете преобразовать его, используя его. Опять же, настройка Teamscript находится за пределами объема, и документация для проекта потрясающая, поэтому проверьте это, если вам это нужно.

Мы собираемся выйти за пределы скучной, но необходимой теории и создаем наш первый проект, используя то, что мы узнали на вершине PreaCt!

Оригинал: “https://dev.to/solarliner/a-beginners-tutorial-to-preact-part-3-jsx-1k68”