Компоненты React в Lucky With Laravel Mix и lucky-react

Я только начал изучать React после 2 лет работы с Angular, и я удивлен тем, насколько React интересен и насколько замечательны сообщество и поддерживающие пакеты. Я также большой поклонник Кристалл и Лаки фреймворктак что может быть лучше, чем использовать эти инструменты вместе?

В этом посте я собираюсь показать вам, как вы можете добавлять компоненты React в свои приложения Lucky с помощью Laravel mix и повезло-реагировать.

Демо

Чтобы увидеть код для этой функции, вы можете клонировать lucky_demo репо и проверить lucky-react ветвь.

git clone git@github.com:mikeeus/lucky_demo.git
cd lucky_demo
bin/setup
git checkout lucky-react

В противном случае вы можете использовать новое счастливое приложение, запустив lucky init app_name.

Ларавель Микс

Поскольку мы будем использовать jsx для написания компонентов React, нам нужно обновить конфигурацию микса Laravel, чтобы правильно скомпилировать наш JavaScript. Laravel mix позволяет легко настроить его, изменив наш mix.js() вызвать в конфигурации mix.react().


mix
  
  .react("src/js/app.js", "public/js") 

Плагин Babel: свойства преобразования класса (необязательно)

Для того, чтобы использовать стрелочные функции и другой замечательный синтаксис, нам нужен Babel’s transform-class-properties плагин. Laravel mix не поставляется с этим плагином по умолчанию, поэтому нам нужно его установить.

yarn add babel-plugin-transform-class-properties

Затем мы добавляем .babelrc файл в корне нашего проекта со следующим содержимым:

{
  "plugins": [
    "transform-class-properties"
  ]
}

Это будет подобрано миксом автоматически! Наркотик.

Написание React-компонентов

Теперь, когда у нас есть поддержка jsx, мы можем писать компоненты и импортировать их в наш app.js файл. Для организации я помещаю свои компоненты в src/js/components/ каталог.

Здесь Bordered компонент и упрощенная версия Chat компонент, который используется в демонстрационном приложении.


import React from 'react';

export class Bordered extends React.Component {  
  render() {
    return (
      <div style={{border: '2px solid'}}>
        {this.props.children}
      </div>
    )
  }
}

import React from 'react';

import { ChatInput } from './ChatInput';
import { Message } from './Message';

export class Chat extends React.Component {
  ...
  render() {
    return (
      <div style={styles}>
        <h2 style={styles}>Conversation</h2>
        <div>
          {
            this.state.messages.map(message => 
              <Message
                key={message.id}
                sender={message.sender}
                text={message.text} />
            )
          }
        </div>
        <ChatInput writeMessage={this.onWriteMessage}/>
      </div>
    )
  }
}

LuckyReact

Чтобы разрешить рендеринг компонентов React в приложениях Lucky, я создал модуль npm с именем повезло-реагировать который добавляет прослушиватели событий на turbolinks:load и turbolinks:before-render монтировать и демонтировать компоненты с помощью [data-react-class] и [data-react-props] атрибуты.

Я также создал осколок кристалла под названием lucky_react со вспомогательными методами для рендеринга элементов с этими атрибутами на ваших страницах Lucky.

Модуль Lucky-React npm: находит и отображает компоненты React на ваших страницах, используя [data-react-class] и [data-react-props] атрибуты.
кристаллический модуль lucky_react: Добавляет вспомогательные методы для рендеринга элементов с правильными атрибутами, чтобы их можно было найти lucky-react.

Давайте воспользуемся ими сейчас, чтобы отрендерить наш Chat и Bordered компоненты на нашей домашней странице.

Сначала установите модуль npm.

yarn add lucky-react

Затем добавьте осколок в shard.yml и беги shards.

# shard.yml
...
  dependencies:
    ...
    lucky_react:
      github: mikeeus/lucky_react

Регистрация компонентов React

Для того чтобы LuckyReact для рендеринга наших компонентов нам нужно импортировать и зарегистрировать их в нашем app.js файл.

// src/js/app.js
...
import LuckyReact from "lucky-react";

import { Chat } from './components/Chat';
import { Bordered } from './components/Bordered';

LuckyReact.register({ Chat, Bordered });

Это все, что нам нужно сделать! LuckyReact создаст прослушиватели событий на turbolinks:load и turbolinks:before-render монтировать и размонтировать эти компоненты, если находит их на странице.

Обратите внимание, что нам нужно только зарегистрироваться Chat и Bordered поскольку они являются единственными корневыми компонентами.ChatInput и Message вложены в Chat и будет автоматически обрабатываться React.

Отображение компонентов на страницах

Теперь на наших страницах мы можем использовать LuckyReact crystal для добавления элементов, которые ссылаются на наши компоненты, чтобы их можно было визуализировать.


require "lucky_react"

class Home::IndexPage < GuestLayout
  include LuckyReact 

  def content
    react "Bordered" do 
      h1 "React Component", style: "text-align: center;"
    end

    messages = [
      { id: 1, sender: "me", text: "Hi" },
      { id: 2, sender: "Chatbot", text: "Hi! How can I help?" },
      { id: 3, sender: "me", text: "Can you tell me the time?" },
      { id: 4, sender: "Chatbot", text: "Sure it's #{Time.now}" }
    ]

    react "Chat", { messages: messages } 
  end
end

Мы можем визуализировать компоненты без lucky_react шард, добавив [data-react-class] и [data-react-props]. Приведенный выше пример будет тогда записан так:


class Home::IndexPage < GuestLayout
  def content
    div  "data-react-class": "Bordered" do
      h1 "React Component", style: "text-align: center;"
    end

    messages = [
      { id: 1, sender: "me", text: "Hi" },
      { id: 2, sender: "Chatbot", text: "Hi! How can I help?" }
    ]

    div "data-react-class": "Chat", "data-react-props": ({ messages: messages }).to_json
  end
end

Если вы сейчас запустите приложение и посетите домашнюю страницу, вы увидите, что компонент чата работает!

Присоединяйтесь к нам

Надеюсь, вам понравился этот урок и вы сочли его полезным. Присоединяйтесь к нам на Канал счастливого гиттера чтобы быть в курсе фреймворка или проверить документы для получения дополнительной информации о том, как воплотить идею вашего приложения в жизнь с помощью Lucky.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *