Сравнение: Svelte и React
- среда, 19 июня 2019 г. в 00:17:57
На сайте React'a есть туториал, в котором описывается разработка игры Tic Tac Toe. Я решил повторить разработку этой игры на Svelte. Статья охватывает только первую половину туториала, до реализации истории ходов. Для целей ознакомления с фреймворком этого вполне достаточно. Каждый раздел статьи соответствует разделу туториала, содержит ссылки на исходный код обоих фреймворков.
React — Svelte
Каждый компонент выполняется в отдельном файле. Компонент может содержать в себе код, html разметку и css стили. Показано использование вложенных компонентов, переменных (на примере переменной status), блока each. Стили меняются редко, поэтому разместил их после html разметки, чтобы лишний раз не пролистывать их.
React — Svelte
Объявлено свойство value в Square. Использован блок if, без него по-умолчанию показывает null в клеточке. В Board показано использование индексов массива для заполнения клеток.
React — Svelte
По клику в клетке появляется крестик. В Square добавлен обработчик события DOM.
React — Svelte
До этого момента состояние клеточек хранилось в самих клеточках, сейчас они переведены в один массив, и этот массив находится в компоненте Board, т.е. в Board сейчас хранится состояние всей игры. Обработка клика выполнена с помощью диспетчера событий, он передает сообщение о клике от Square в Board. В сообщении передается индекс клеточки, обработчик сообщения handleClick в Board изменяет состояние игры. Square теперь снова отображает состояние клеточки с помощью свойства value.
React умеет передавать в обработчик события аргумент таким образом:
onClick={() => this.handleClick(i)}
Svelte такого не умеет, или я просто не нашел, как это правильно сделать, поэтому пришлось использовать диспетчер событий, в Square передавать через свойство индекс клеточки и обратно передавать его в Board с помощью диспетчера событий. Если есть лучший способ, расскажите.
React — Svelte
Добавлено появление нолика после крестика.
React — Svelte
Добавлена функция определения победителя, добавлен запрет клика по уже установленным клеткам и после победы.
Дальше проходить туториал не планирую, с фреймворком ознакомился. Сейчас больше интересует взаимодействие с бэкендом.