Перейти к содержанию
Новости искусства и дизайна
Всё о мировых событиях в мире графического, промышленного и веб дизайна, современного искусства,
Новости искусства и дизайна
  • Главная
  • Рубрики статей
  • Контакты
  • Главная
  • Рубрики статей
  • Контакты

GitHub — Tencent / omi на webdesignernews.com

Вы здесь:
  1. Главная
  2. Статьи по дизайну
  3. GitHub — Tencent / omi…
Окт202018
Статьи по дизайну


English |简体 中文

 omi "width =" 300 "style =" max-width: 100%; "/> </p>
<div id=

Содержание статьи

  • 1 Omi: веб-инфраструктура следующего поколения в JavaScript 4kb
  • 2 Почему Оми?
  • 3 Добавить Оми в одну минуту
  • 4 Начало работы
    • 4.1 Установите
    • 4.2 Hello Element
    • 4.3 TodoApp
    • 4.4 Магазин
      • 4.4.1 Резюме:
    • 4.5 Жизненный цикл
  • 5 Компонентная экосистема
  • 6 Отладка
  • 7 Поддержка браузеров
  • 8 Ссылки
  • 9 Вклад
  • 10 Лицензия

Omi: веб-инфраструктура следующего поколения в JavaScript 4kb

Объединить JSX, веб-компоненты, прокси, магазин, обновление пути вместе

Почему Оми?

  • Крошечный размер. ( 4kb gzipped)
  • Поддерживает TypeScript.
  • Реактивная привязка данных
  • На основе Shadow DOM
  • Легко отлаживается через расширение Omi DevTools [Install from Chrome WebStore]
  • Соблюдение тенденции браузера и дизайна API.
  • Объединить JSX и веб-компоненты в одну структуру.
  • Веб-компоненты также могут быть ориентированы на данные, UI = fn (данные) .
  • JSX — лучший опыт разработки (интеллектуальное завершение кода и подсказка). Выражение пользовательского интерфейса с наименьшим грамматическим шумом.
  • Оригинальная система Path Updating . Автоматическое автоматическое обновление потребление низкой мощности высокая степень свободы, отличная производительность, легкая интеграция requestIdleCallback
  • Попробуйте this.update метод при использовании системы хранения ! Он будет автоматически обновлять пользовательский интерфейс при изменении данных.
  • Посмотрите на Facebook React vs Web Components, Omi сочетает в себе свои преимущества и дает разработчикам свободу выбора 19459017 .
  • Shadow DOM объединяется с Virtual DOM Omi использует как виртуальную DOM, так и реальную DOM DOW, чтобы сделать просмотр обновлений более точным и быстрым.
  • В системе Store 99,9% проектов не требуют путешествий во времени, и не только Redux может путешествовать, пожалуйста, не придумывайте Redux, система магазинов Omi может удовлетворить все проекты
  • Лучшее решение с CSS — это Shadow DOM сообщество, разбивающее фреймворки и библиотеки для Scoped CSS (с использованием стилей записи JS или JSON, таких как Radium, jsxstyle, стиль, привязка к webpack с использованием сгенерированного уникального className filename-classname-hash такого как CSS-модули, Vue), являются хакерскими технологиями; и Shadow DOM Style — идеальное решение .

Сравнить TodoApp от Omi и React, Omi и React, рендеринг структуры DOM:

Оми React
 Omi "style =" max-width: 100%; "/> </td>
<td> <img src= Добавить Оми в одну минуту

Эта страница демонстрирует использование Omi без инструмента для сборки .

 
< HTML >

< глава >
   meta   charset  =   " UTF-8 "   />
  < название > Добавить Оми в одну минуту </  название >
</  глава >

< тело >
     src  =   " https://unpkg.com/omi "  > </  ] сценарий >
  < сценарий > 
  const  { WeElement  h  render  определяют }  =  Оми 

  класс   LikeButton   распространяется   WeElement  {
  установить  () {
      =  {понравилось :   false } 
} 

   () {
 если  ( это .  данные .  понравилось ) {
  return    ' Вам понравилось. '   
} 

  возвращение   h  (
      
 {
  onClick  :  ()  =>  {
  это .  данные .  понравилось   =   true  
  это .  обновление  () 
} 
}, 
   '    
) 
} 
} 

  определяют  (  » аналогичная кнопка  ' LikeButton) 

    h  (  » аналогичная кнопка   ),   ' тела   ) 
  </  сценарий >
</  тела >

</  HTML > 

Вы также можете использовать тег как кнопка непосредственно в HTML:

 < тело >
  < как-кнопки  > </  как-кнопки  >
</  тела > 

Начало работы

Установите

 $ npm i omi-cli-g   #  установить cli 
$ omi init your_project_name   #  init project, вы также можете выполнить команду 'omi init' в пустой папке 
$  cd  your_project_name   # пожалуйста, проигнорируйте эту команду, если вы выполнили 'omi init' в пустой папке 
$ npm start   #  разработать 
$ npm run build   #  выпуск  

Описание в каталоге:

  ├─ config
├─ общественность
├─ скрипты
├─ src
│ ├─ активы
│ ├─ elements // Хранить все пользовательские элементы
│ ├─ store // Хранить все это хранилище страниц
│ ├─ admin.js // Запись js компилятора, будет создана для admin.html
│ └─ index.js // Запись js компилятора, будет создана для index.html
 

Автосозданные строительные леса CLI основаны на одностраничном приложении create-response-app, которое будет преобразовано в многостраничное, с проблемами конфигурации, чтобы увидеть руководство пользователя для создания-реагирования-приложения

Hello Element

Определите пользовательский элемент, расширив WeElement базовый класс и назовите его с помощью @tag decorator:

  import  { tag  WeElement  render }  из     оми   

@  Тег  (   Привет-элемент   )
 класс   HelloElement   extends   WeElement  {

     onClick   =  ( evt )  =>  {
          //  триггер CustomEvent 
               abc  ' {name :     dntzhang  ' возраст :   12 })
         ЭВТ .  stopPropagation  ()
    }

     css  () {
       возвращение    ` 
 div {
 цвет: красный; 
 курсор: указатель; 
}  ` 
    }

     render  ( реквизит ) {
       возвращение  (
         < div onClick  =  { это .  onClick } > 
          Привет [ реквизит .  msg } { реквизит .  propFromParent }
           < div >       <  /  div > 
         <  /  DIV > 
      )
    }
} 

Использование hello-element :

  import  { tag  WeElement  render }  из     оми   
 импорт    ' ./ hello-element '  

@  Тег  (   мое-приложение   )
 класс   MyApp   распространяется   WeElement  {
   static   get   данные  () {
        {abc :      ' passToChild :      ' }
  }

    //  bind CustomEvent 
   onAbc   =  ( evt )  =>  {
        //  получить данные evt по evt.detail 
           abc   =       $ {  ЭВТ .  подробно .  имя  }    ` 
       это .  Обновление  ()
  }

   css  () {
     возвращение    ` 
 div {
 цвет: зеленый; 
}  ` 
  }

     реквизит  данные ) {
     возвращение  (
       < DIV > 
        Привет [ реквизит .  имя } { данные .  abc }
           -  элемент onAbc  =  {   onAbc } prop  -  из  -  parent  =  { данные .  passToChild } msg  =    " WeElement  "  > <  /  Привет  -  элемент > 
       <  /  DIV > 
    )
  }
}

   < мое  -  название приложения  =    ' Omi v4.0 '   >   /  мой  -  приложение >   ' тело   ) 

Скажите Бабелю, чтобы превратить JSX в Omi.h () звонок:

 {
     presets  " : [ "  env  "   " оми "  ]
} 

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

   " babel-preset-env "  :   " ^ 1.6.0 "  ,
  " babel-preset-omi "  :   " ^ 0,1.1 "   , 

Если вы не хотите писать CSS в JS, вы можете использовать to-string-loader,
Например, следующая конфигурация:

 {
  :    /   [   |   / ]  _  [ ]  S ]   *   .  CSS  $   /  ,
  использование :  [
       в строке-загрузчик   ,
       CSS-погрузчик   
  ]
} 

Если ваш файл CSS начинается с « _ », CSS будет использовать для-string-loader ., Например:

  import  { tag  WeElement   render }  из    ' оми   

  //  typeof cssStr является строкой 
 импорт   cssStr   из    ' ./_ index.css '  

@  Тег  (   мое-приложение   )
 класс   MyApp   распространяется   WeElement  {

   css  () {
     возвращение  cssStr
  }
   ... 
   ... 
   ...  

TodoApp

Вот относительно полный пример TodoApp:

  import  { tag  WeElement  render }  из     оми   

@  Тег  (   TODO-лист   )
 класс   TodoList   extends   WeElement  {
     render  ( реквизит ) {
         возвращение  (
             < уль > 
                {19459049] реквизит .  предметы .  карта  ( пункт   => 
                     < li key  =  { Пункт .  id } >  { Пункт .  текст }  <  /  Li > 
                ))}
             <  /  уль > 
        );
    }
}

@  Тег  (   TODO-приложение   )
 класс   TodoApp   extends   WeElement  {
   static   get   данные  () {
      {пункты :  []текст :      ' }
  }

   render  () {
     возвращение  (
       < DIV > 
         < Н3 >   TODO   <  /  Н3 > 
         < todo  -  перечислил элементы  =  { .  данные .  пункты }  /  > 
         < форма onSubmit  =  { этот .  рукояткаSubmit } > 
           < вход
            ID  =    " новый список задачи "  
            OnChange  =  { это .  handleChange }
            значение  =  { это .  Данные .  текст }
           /  > 
           < Кнопка > 
                  .  длина   +   1 }
           <  /  Кнопка > 
         <  /  форма > 
       <  /  DIV > 
    );
  }

   handleChange   =  ( e )  =>  {
         текст   =   e .  Цель .  значение 
  }

   handleSubmit   =  ( e )  =>  {
     е   preventDefault  ().
    если     это .  данные .  текст .  обрезка  ().  длина ) {
       возвращение ;
    }

     это .  Данные .  элементов .  толчок  ({
      текст :   это .  данные .  текст ,
      id :   Дата .  сейчас  ()
    })
       данные .  текст   =        ;
     это .  Обновление  ()
  }
}

   < todo  -  приложение  /  >   ' тело   ) 

Магазин

Попробуйте this.update метод при использовании системы магазинов! При изменении данных он будет автоматически обновлять пользовательский интерфейс. Мощная архитектура Store отличается высокой производительностью, поскольку все данные монтируются в хранилище, за исключением компонентов, которые полагаются на опоры для определения состояния компонента.

  экспорт   по умолчанию  {
  данные :  {
    пункты :  [],
    текст :    ' '  ,
    firstName :    ' dnt '  ,
    lastName :    ' zhang '  ,
     fullName  :   функция  () {
       возвращение   это .  firstName   +   это .  lastName 
    },
    :     abc  '   //  Изменить, он обновит все элементы без изменения компонентов и страницы, объявляющих зависимость данных. 
    ccc : : :   1 }   //  Изменить это будет обновлять все элементы без изменения компонентов и объявления страниц. зависимость. 
  },
       globalPropTest  '  '  ccc.ddd  ' ],
   добавить  :   function  () {
    если     это .  данные .  текст .  обрезка  ().  длина ) {
       возвращение ;
    }
     это .  Данные .  элементов .  толчок  ({
      текст :   это .  данные .  текст ,
      id :   Дата .  сейчас  ()
    })
       данные .  текст   =       
  }
    //  Значение по умолчанию - false, значение true будет обновлять все экземпляры при изменении данных. 
    //  updateAll: true 
} 

Пользовательский элемент требует объявления зависимых данных, так что Omi сохраняет вычислительный путь зависимости на основе данных, объявленных на пользовательском компоненте, и обновляет их локально по мере необходимости. Например:

  класс   TodoApp   распространяется   WeElement  {
    //  Если вы используете хранилище, данные используются только для объявления зависимостей. 
   static   get   данные  () {
      {пункты :  []текст :      ' }
  }
    //  ... 
   handleChange   =  ( e )  =>  {
           текст   =   e .  цель .  значение 
  }

   handleSubmit   =  ( e )  =>  {
     е .  preventDefault  ()
     это .  магазин .  добавить  ()
  }
} 

  • Логика данных инкапсулирована в методе определения хранилища (например, store.add ).
  • Взгляды — это только ответственные за передачу данных для хранения таких как вызов store.add или установка store.data.text сверху.

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

    < todo  -  приложение  /  >    тело  ' магазин) 

→ Сохранить исходный код

Резюме:

  • store.data используется для отображения всех атрибутов и значений по умолчанию (кроме компонентов представления, определенных реквизитами).
  • Данные компонента и страницы используются для перечисления атрибутов зависимого store.data (Omi будет записывать путь) и обновления по запросу.
  • Если на странице несколько простых компонентов, updateAll может быть установлено в true а компонентам и страницам не нужно декларировать данные, и они не обновляются по запросу
  • Путь, объявленный в globalData обновляет все страницы и компоненты, изменяя значение соответствующего пути, который может использоваться для отображения всех страниц или большинства путей общедоступных свойств

Жизненный цикл

Метод жизненного цикла Когда его назовут
установите перед тем, как компонент подключится к DOM
установлен после того, как компонент подключается к DOM
удалить до снятия с DOM
BeforeUpdate до render ()
AfterUpdate после render ()

Компонентная экосистема

Я считаю, что вы можете легко преобразовать элементы веб-компонентов в элементы omi.

Отладка

Используя Omi DevTools, вы можете просто отлаживать и управлять своим пользовательским интерфейсом без какой-либо конфигурации . Просто установите и отлаживайте.

Поскольку Omi использует веб-компоненты и Shadow-DOM, ему не нужно иметь другую панель элементов, такую ​​как React или Vue. Он просто добавляет панель к боковой панели элементов и она настолько же эффективна, как и React и Vue DevTools.

 Omi DevTools "style =" max-width: 100%; "/> </p>
<h2><span id= Поддержка браузеров

Omi 4.0+ работает в последних двух версиях всех основных браузеров: Safari 10+, IE 11+ и вечнозеленых Chrome, Firefox и Edge.

 Поддержка браузеров «style =» max-width: 100%; »/> </p>
<p> → Полиполки </p>
<blockquote>
<p> Если вы хотите быть совместимым с IE11, используйте файл Omi → этого проекта. Этот проект использует JSON Diff + Timer вместо Proxy. </p>
</blockquote>
<blockquote>
<p> Вы можете динамически загружать JS этого проекта в среду IE9, а прокси-версия по-прежнему используется в других средах. </p>
</blockquote>
<h2><span id= Ссылки

Вклад

  1. Вилка (https://github.com/Tencent/omi/fork)
  2. Создайте свою ветку ( git checkout -b мое-срочное исправление )
  3. Зафиксируйте свои изменения ( git commit -am «Исправлено что-то» )
  4. Нажмите на ветку ( git push origin my-emergency-hotfix )
  5. Создайте новый запрос Pull

Пожалуйста, свяжитесь с нами по любым вопросам:

Лицензия

MIT © Tencent

Category: Статьи по дизайну20.10.2018
Теги: GitHubomiTencentwebdesignernewscomна

Пожалуйста, поставьте рейтинг статье:
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Поделиться этой записью
Share with FacebookShare with TwitterShare with Google+Share with PinterestShare with LinkedInShare with WhatsApp

Навигация по записям

ПредыдущаяПредыдущая запись:6 способов превратить бренд в фамилиюСледующаяСледующая запись:Пикассо и Моне из собрания Клапперов продадут в Нью-Йорке • ARTANDHOUSES

Связанные записи

Пять архитекторов разработали концепции мемориала королеве Елизавете II
09.05.2025
Инсталляция Deliberate Pauses в ОАЭ предлагает замедлиться
07.05.2025
Инсталляция Deliberate Pauses в ОАЭ предлагает замедлиться
07.05.2025
Как оставаться чуть более продуктивным / Жизнь / Сайты и биржи фриланса. Обзоры фриланс бирж. Новости. Советы. Фриланс для начинающих. FREELANCE.TODAY
07.05.2025
Herman Miller выпустит коллекцию, вдохновленную наследием Джорджии О’Кифф
06.05.2025
Как сделать поля формы удобными для восприятия без резкого контраста
06.05.2025

Самые свежие статьи

  • Пять архитекторов разработали концепции мемориала королеве Елизавете II Пять архитекторов разработали концепции мемориала королеве Елизавете II
  • Инсталляция Deliberate Pauses в ОАЭ предлагает замедлиться Инсталляция Deliberate Pauses в ОАЭ предлагает замедлиться
  • Инсталляция Deliberate Pauses в ОАЭ предлагает замедлиться Инсталляция Deliberate Pauses в ОАЭ предлагает замедлиться
Useful Links
Go to Top

Поделитесь статьей!

  • Facebook
  • Google
  • Twitter
close-link