M inimal, o bvious, Graphical We eb a pplication i nterface
mogwai - это библиотека View для создания приложений GUI. Он написан в Rust и работает в вашем браузере и имеет достаточно функциональности сервера для рендеринга. Это альтернатива реагировать, магистраль, Ember, ELM, Purescript и т. Д.
Основные концепции mogwai - это
раковины и потоки вместо обратных вызовов
Просмотреть события, такие как Click, Mouseover и т. Д., Справляются через потоки вместо того, чтобы вызовать обратный вызов. Потоки могут быть нанесены на карту, отфильтрованы и сложены.
Виджеты глупы
Представление - это просто структура, которая мутирует дерево пользовательского интерфейса после получения сообщения от потока. Виды создаются и вложены с использованием простых ржавных функций или макроса RSX.
Логика виджетов - это одна или несколько асинхронных задач, которые зацикливаются на сообщениях о событиях
Виджеты используют асинхронные циклы задачи, которые получают события из представления и отправляют обновления в представление в ответ.
Вот пример кнопки, которая подсчитывает количество раз, когда она была нажата:
use mogwai_dom :: prelude :: * ;
# [ derive ( Default ) ]
struct Button {
clicks : usize ,
click : Output < ( ) > ,
text : Input < String > ,
}
impl Button {
/// Convert into a `ViewBuilder`
fn builder ( mut self ) -> ViewBuilder {
rsx ! (
button ( on : click= self . click . sink ( ) . contra_map ( |_ : JsDomEvent | ( ) ) ) {
// Using braces we can embed rust values in our UI tree.
// Here we're creating a text node that starts with the
// string "Clicked 0 times" which updates every time a
// message is received on the stream.
{ ( "Clicked 0 times" , self . text . stream ( ) . unwrap ( ) ) }
}
) . with_task ( async move {
while let Some ( ( ) ) = self . click . get ( ) . await {
self . clicks += 1 ;
self . text . set ( if self . clicks == 1 {
"Clicked 1 time" . to_string ( )
} else {
format ! ( "Clicked {} times" , self . clicks )
} ) . await . unwrap ( ) ;
}
} )
}
}
let btn = Button :: default ( ) ;
// Get a sink to manually send events.
let mut click_sink = btn . click . sink ( ) ;
// Build the view to render in the browser
let view = Dom :: try_from ( btn . builder ( ) ) . unwrap ( ) ;
// Attach it to the browser's DOM tree
view . run ( ) . unwrap ( ) ;
// Spawn asyncronous updates
wasm_bindgen_futures :: spawn_local ( async move {
// Queue some messages for the view as if the button had been clicked:
click_sink . send ( ( ) ) . await . unwrap ( ) ;
click_sink . send ( ( ) ) . await . unwrap ( ) ;
// view's html is now "<button>Clicked 2 times</button>"
} ) ; Если вы заинтересованы в изучении больше - пожалуйста, прочитайте введение и документацию.
ViewBuilder позволяет работать на нескольких платформах (Web, iOS, Android, Desktop и т. Д.) mogwai использует потоки, раковины, декларативную визуальную строитель и асинхронную логику для определения компонентов и того, как они меняются со временем.
Посмотреть мутация является явной и происходит в результате получения сообщений, поэтому не существует накладных расходов на VDOM.
Если вы предпочитаете функциональный стиль программирования с большим количеством карт и складок - или если вы хотите пойти в vroom! Тогда, может быть, mogwai подходит тебе :)
Пожалуйста, имейте в виду, что mogwai все еще в Альфе, и API активно меняется - PR, проблемы и вопросы приветствуются. По состоянию на выпуск 0.6 мы ожидаем, что API будет относительно обратно совместимы.
mogwai - первая библиотека ржавчины. Нет никаких требований, чтобы у вас был npm или node . Выполнить и запустить ваш проект без написания JavaScript достаточно просто.
mogwai ускорил! Вот несколько очень отрывочных и отрывочных метрик:

Сначала вам понадобится новая (иш) версия инструментального оборудования Rust. Для этого вы можете посетить https://rustup.rs/ и следовать инструкциям по установке.
Тогда вам понадобится wasm-pack.
Для начала нового проекта Mogwai мы будем использовать замечательные cargo-generate , который можно установить с помощью cargo install cargo-generate .
Затем беги
cargo generate --git https://github.com/schell/mogwai-template.git и дайте командной строке имя проекта. Затем cd в ваш игристый новый проект и
wasm-pack build --target web Затем, если у вас его еще нет, cargo install basic-http-server или используйте свою любимую альтернативу для обслуживания вашего приложения:
basic-http-server -a 127.0.0.1:8888Счастливого взлома! ☕ ☕ ☕
? Приготовление пищи с Mogwai - это серия примеров решений различных задач пользовательского интерфейса. Он направлен на то, чтобы быть хорошим справочным документом, но не пошаговым учебником.
Повесить и поговорить о mogwai в канале поддержки:
Примеры можно найти в папке примеров.
Чтобы построить примеры использования:
wasm-pack build --target web examples/{the example}Дополнительные внешние примеры включают:
Пожалуйста, рассмотрите возможность спонсирования разработки этой библиотеки!