Articles

shakacode / react_on_rails

reactrails

LicenseBuild StatusGem Versionnpm versionCode ClimateCoverage Status

These are the docs for React on Rails 12. To see the version 11 docs, click here.

News

October 14, 2020: RUBY ROGUESRR 474: React on Rails V12-Don’t Shave That Yak! com o Justin Gordon.

1 de outubro de 2020: veja o repo exemplo spec/dummy para uma configuração simples de webpack via rails/webpacker gem that supports SSR.

ugust 2, 2020: See the example repo of React on Rails Tutorial With SSR, HMR fast refresh, and TypeScript for a new way to setup the creation of your SSR bundle with rails/webpacker.8 de julho de 2020: libertação de V12 de React on Rails.

melhorias importantes

  1. Reat Hooks Support for top level components
  2. Typescript bindings

  3. rails / webpacker “just works” with React on Rails by default.suporte a
  4. i18n para gerar um ficheiro JSON em vez de um ficheiro JS.não se esqueça de ver a CHANGELOG.md e leia as instruções de actualização: docs / basics / Upgrade-react-on-rails.
    • veja a Conversa de Justin RailsConf: Webpacker, It-Just-Works, But How?.está interessado em apoiar a reacção sobre carris? Quer usar o nó?js para fazer a renderização do lado do servidor de modo que bibliotecas como emoção e Componentes carregáveis apenas funcionam, em comparação com a renderização via Ruby embedded JS? Em caso afirmativo, Reat on Rails Pro.
    • HMR está trabalhando com componentes carregáveis para uma experiência incrível de desenvolvimento de recarga quente e grande desempenho em tempo de execução. Por favor, envie-me um e-mail se quiser usar a divisão de códigos de componentes carregáveis para acelerar o seu aplicativo, reduzindo o tamanho do seu pacote e carregando preguiçosamente o código que é necessário.

    sobre

    Reat on Rails integra Rails com (a representação do servidor) a estrutura React front-end do Facebook.este projeto é mantido pela empresa de consultoria de software ShakaCode. Nós nos concentramos em Ruby em aplicações de Rails com front-ends React, muitas vezes usando TypeScript ou ReasonML. Também construímos sites de Gatsby. Veja nosso trabalho recente para exemplos do que fazemos.

    interessado em otimizar a configuração do seu webpack para Reat on Rails, incluindo codesplitting com reat-router, e loadable-components com renderização do lado do servidor?Acabamos de fazer isso para Popmenu, baixando os custos de Heroku 20-25%, enquanto obter uma diminuição de 73% nos tempos de Resposta média.Sinta-se à vontade para contactar o Justin Gordon. [email protected], mantenedor de Reat on Rails, para mais informações.Clique para ligar Reat + Rails Slack.

    objectivo do projecto

    proporcionar um quadro de alto desempenho para integrar o Ruby on Rails com a reacção através da gema do Webpacker, especialmente no que diz respeito à representação do lado do servidor para melhor SEO e melhor desempenho.características e porquê reagir sobre carris?

    dado querails/webpacker gem já fornece a integração básica de reacção, por que você usaria “React on Rails”?passagem fácil de adereços directamente do seu Carris para os seus componentes de reacção, em vez de ter o seu Carris para a carga e, em seguida, fazer um pedido separado para a sua API.integração apertada com Carris/webpacker.

  5. renderização do lado do servidor( SSR), muitas vezes usado para indexação de SEO crawler e desempenho UX, não é oferecido por rails/webpacker.
  6. Redux and React Router integration with server-side-rendering.internacionalização (I18n) e (localização) uma comunidade de apoio. Esta pesquisa na web mostra como os sites públicos ao vivo estão usando Reat on Rails.Suporte para Reason ML.

See Rails/Webpacker Reat Integration Options for comparisons to other gems.

See the react-webpack-rails-tutorial for an example of a live implementation and code.

conteúdo premium do Fórum ShakaCode

requer a criação de uma conta livre.

  • Como utilizar diferentes versões de um ficheiro para a renderização do cliente e servidor
  • Como criar condicionalmente o lado do servidor com base no tipo de dispositivo

Docs

considere navegar por isto no nosso website.

pré-Requisitos

Ruby on Rails >=5 e rails/webpacker 4.2+.

introdução

Nota, a melhor maneira de entender como usar ReactOnRails é estudar alguns exemplos simples. Você pode fazer uma configuração de demonstração rápida, tanto em seu aplicativo existente ou em um novo aplicativo Rails.

  1. Faça o tutorial rápido.adicionar reacção sobre carris a uma aplicação de Carris existente de acordo com as instruções.
  2. Look at spec / dummy, a simple, no DB example.olha para isto. github.com/shakacode/react-webpack-rails-tutorial; é um exemplo completo ao vivo em www.reactrails.com.

instalação básica

Ver também as instruções para instalar numa aplicação de Carris existente.

  1. adicione oreact_on_rails gem ao Gemfile:

    bundle add react_on_rails --strict
  2. Commit este git (ou outra coisa que você não pode executar o gerador, a menos que você passe a opção --ignore-warnings).

  3. Executar o gerador de:

    rails generate react_on_rails:install
  4. Iniciar o aplicativo:

    rails s
  5. Visite http://localhost:3000/hello_world.

ligar a renderização do servidor

com o código de executar o gerador Reat on Rails acima:

  1. Editar app/views/hello_world/index.html.erb e set prerendertrue.actualizar a página.

Abaixo é a linha onde você ativar o processamento do servidor, definindo prerender true

<%= react_component("HelloWorld", props: @hello_world_props, prerender: false) %>

Nota, se você tem um erro no seu console em relação a “ReferenceError: janela não está definido”,em seguida, você precisa editar config/webpacker.yml e set hmr: false e inline: false.Veja rails / webpacker PR 2644 para uma correção para este assunto.

utilização básica

configuração

  • configurar config/initializers/react_on_rails.rb. Você pode ajustar algumas configurações e predefinições necessárias. Veja o ficheiro docs / basics / configuration.md para a documentação de todas as opções de configuração.
  • Configure config/webpacker.yml. Se você usou o gerador e a configuração padrão do webpacker, você não precisa tocar neste arquivo. Se estiver a personalizar a sua configuração, então consulte o spec/dummy/config/webpacker.exemplo yml ou o webpacker padrão oficial.yml.
    • Tip: definir compile: false para o desenvolvimento se souber que estará sempre a compilar com um processo de observação. Caso contrário, cada pedido irá verificar se a compilação é necessária.
    • o seu public_output_pathdeve corresponder à sua configuração personalizada do Webpack paraoutput dos seus pacotes.
    • apenas setcache_manifest totrue in your production env.

incluindo o seu componente de reacção nos seus Carris, os componentes de reacção são representados através dos seus Carris. Aqui está uma amostra ERB.:

<%= react_component("HelloWorld", props: @some_props) %>
  • Server-Side Rendering: o seu componente react é apresentado pela primeira vez em HTML no servidor. Use a opção pré -ender:

    <%= react_component("HelloWorld", props: @some_props, prerender: true) %>
  • o parâmetro component_name é uma cadeia que corresponde ao nome que usou para expor o seu componente React globalmente. Assim, nos exemplos acima, se você tivesse um componente React chamado “HelloWorld”, você registrá-lo-ia com as seguintes linhas:

    import ReactOnRails from 'react-on-rails';import HelloWorld from './HelloWorld';ReactOnRails.register({ HelloWorld });

    expor o seu componente desta forma é como a reacção sobre os carris é capaz de referenciar o seu componente de uma vista sobre os carris. Você pode expor todos os componentes que quiser, desde que seus nomes não colidam. Veja abaixo os detalhes de como você expõe seus componentes através da configuração do webpack react_on_ Rails. Você pode chamar ReactOnRails.register muitas vezes.

  • @some_props pode ser uma cadeia de hash ou JSON. Este é um argumento opcional assumindo que você não precisa passar todas as opções (se você deseja passar as opções, como prerender: true, mas você não quer passar quaisquer propriedades, basta passar um hash vazio {}). Isto tornará os dados disponíveis no seu componente:

     # Rails View <%= react_component("HelloWorld", props: { name: "Stranger" }) %>
  • isto é o que o seu HelloWorld.o ficheiro js pode conter. O railsContext está sempre disponível para quaisquer parâmetros que você sempre quer disponíveis para seus componentes Reat. Não tem nada a ver com o conceito de contexto de reacção. Veja as funções de renderização e o RailsContext para mais detalhes sobre este tópico.

    import React from 'react';export default (props, railsContext) => { // Note wrap in a function to make this a React function component return () => ( <div> Your locale is {railsContext.i18nLocale}.<br/> Hello, {props.name}! </div> );};
  • Veja os Helpers API para obter mais detalhes sobre react_component e de seu irmão função react_component_hash.

    expondo globalmente os seus componentes Reat

    para o Assistente Reat on Rails view react_component para utilizar os seus componentes Reat, terá de os registar no seu código JavaScript.

    Use módulos da mesma forma que você faria ao usar Webpack e reagir sem trilhos. A diferença é que, em vez de montar os componentes reagem diretamente a um elemento usando React.render, você registra os seus componentes em Retonrails e, em seguida, montá-los com ajudantes dentro de suas vistas de trilhos.

    Esta é a forma de expor um componente aoreact_component view helper.

     // app/javascript/packs/hello-world-bundle.js import HelloWorld from '../components/HelloWorld'; import ReactOnRails from 'react-on-rails'; ReactOnRails.register({ HelloWorld });

    código de renderização do lado do servidor diferente (e um pacote específico do servidor)

    pode querer um código diferente para os seus componentes renderizados pelo servidor, em execução do lado do servidor versus lado do cliente. Por exemplo, se você tiver uma animação que corre quando um componente é exibido, você pode precisar desligar isso quando a renderização do servidor. Uma maneira de lidar com isso é o código condicional como if (window) { doClientOnlyCode() }.

    outra maneira é usar um arquivo de configuração de webpack separado que pode usar um arquivo de entrada do lado do servidor diferente, como ‘serverRegistration.js “em oposição a” clientRegistration.js. Isso configuraria um código diferente para a renderização do servidor.

    para mais pormenores sobre as técnicas de utilização de diferentes códigos para a renderização do cliente e do servidor, ver: Como usar diferentes versões de um arquivo para renderização cliente e servidor. (Requer a criação de uma conta gratuita.)

    especificando os seus componentes de reacção: registe-se directamente ou use funções de renderização

    tem duas formas de especificar os seus componentes de reacção. Você pode registrar o componente Reat (função ou componente de classe) diretamente, ou você pode criar uma função que retorna um componente Reat, que nós usamos o nome de uma “função de renderização”. Criar uma função de renderização permite:

    1. ter acesso ao railsContext. Veja a documentação para o railsContext em termos de por que você pode precisar dele. Você precisa de uma função de renderização para acessar o railsContext.
    2. você pode usar os adereços passados para inicializar uma loja de redux ou configurar o reat-router.
    3. você pode retornar diferentes componentes dependendo do que está nos adereços.

    Nota, O valor de retorno de uma função de renderização deve ser uma função React ou componente de classe, ou um objeto que representa os resultados de renderização do servidor.

    não devolva um elemento React (JSX).

    ReactOnRails irá detectar automaticamente uma função de renderização registrada pelo fato de que a função leva mais de 1 parâmetro. Em outras palavras, se você quer a capacidade de fornecer uma função que retorna o componente theReact, então você precisa especificar pelo menos um segundo parâmetro. Este é o railsContext.Se não estiver a usar este parâmetro, declare a sua função com o param não utilizado:

    const MyComponentGenerator = (props, _railsContext) => { if (props.print) { // This is a React FunctionComponent because it is wrapped in a function. return () => <H1>{JSON.stringify(props)}</H1>; }}

    assim, não há diferença entre registar um componente de função React ou componente de classe versus uma “função de renderização”.”Just call ReactOnRails.register.

    react_component_hash para funções de renderização

    outra razão para usar uma função de renderização é que às vezes na renderização do servidor, especificamente com o Router React, você precisa devolver o resultado da chamada ReactDOMServer.renderToString (elemento). Pode fazer isto devolvendo um objecto com a seguinte forma: { renderedHtml, redirectLocation, error }. Certifique-se que utiliza esta função com react_component_hash.

    para a renderização do servidor, se desejar devolver vários strings HTML de uma função de renderização, poderá devolver um objecto da sua função de renderização com uma única Propriedade de Nível Superior de renderedHtml. Dentro deste objeto, coloque uma chave chamada componentHtml, juntamente com quaisquer outras chaves necessárias. Um exemplo disso é quando você está usando bibliotecas de efeitos colaterais como Reat Helmet. O seu código em Ruby irá obter este objecto como um Hash contendo teclas componentHtml e quaisquer outras teclas personalizadas que tenha adicionado:

    { renderedHtml: { componentHtml, customKey1, customKey2} }

    para mais detalhes sobre o uso de react_component_hash com reat-helmet, veja a nossa documentação reat-helmet.

    tratamento de erros

    • todos os erros dos ReactOnRails serão do tipo ReactOnRails:: erro.
    • Pré-Gravação (renderização do servidor) erros obter informações de contexto para HoneyBadger e Sentinela para depuração mais fácil.

    I18n

    React on Rails provides an option for automatic conversions of Rails *.yml locale files into*.json or `.js.Veja Como adicionar I18n para um resumo de adição de I18n.

    Mais Detalhes

    Navegue nos links no Sumário de Conteúdo

    Aqui estão alguns altamente recomendado que os próximos artigos para ler:

    1. Como Reagir on Rails Funciona
    2. Webpack de Configuração
    3. Helpers API
    4. Cache e Desempenho: Reagir on Rails Pro.destacamento.

    suporte

    Clique para ligar Reat + Carris frouxo.

    recursos comunitários

    por favor Clique para subscrever para manter contato com Justin Gordon e ShakaCode. Pretendo enviar anúncios de novos lançamentos de Reat on Rails e de nossos mais recentes artigos de blog e tutoriais.

    2017-01-31_14-16-56

    • Slack Room: Contate us for an invite to the ShakaCode Slack room! Avise-nos se quiser contribuir.
    • forum.shakacode.com: postar suas perguntas
    • @railsonmaui no Twitter
    • para um live, open source, exemplo desta jóia, veja www.reactrails.com.
    • Ver os projectos que utilizam e KUDOS para reagir sobre carris. Por favor, submeta a sua! Por favor, edite qualquer página ou e-mail para nós e vamos adicionar a sua informação. Nós também amamos estrelas como ele nos ajuda a atrair novos usuários e contribuintes.
    • Ver NEWS.md para mais notas ao longo do tempo.

    contribuição

    relatórios de bugs e pedidos de pull são bem-vindos. Veja contribuir para começar, e a lista de problemas de Ajuda desejada.

    reate on Rails Pro

    Support Reat on Rails Pro development by becoming a Github sponsor and get these benefits.

    Reat on Rails Pro inclui renderização de servidores de nós, cache de fragmentos, divisão de códigos e outras melhorias de desempenho para Reat on Rails. Para um estudo de caso, ver a redução de 90% do tempo de resposta do servidor do artigo HVMN, a partir do Reat on Rails Pro. O Wiki contém mais detalhes.

    2018-09-11_10-31-11

    The React on Rails Pro Support Plan can help!

    • otimizar a configuração do seu pacote web para o último pacote web para Reat on Rails, incluindo a divisão de códigos com componentes carregáveis.
    • actualizar a sua aplicação para usar a actualrails/webpacker configuração que salta o pipeline de activos dos Sprockets.cliente de melhor desempenho e lado do servidor.melhores práticas baseadas em mais de 6 anos de experiência de reacção sobre carris em muitos projectos de produção.usando a razão com (ou sem) reacção sobre carris.

    ShakaCode também pode ajudá-lo com as suas necessidades de desenvolvimento de software personalizado. Somos especializados em aplicações de mercado e e-commerce que utilizam trilhos e reagem. Porque nós temos HiChee.com podemos usar esse código para a sua aplicação!por favor, envie um e-mail para Justin Gordon. [email protected], o mantenedor de Reat on Rails, para mais informações.

    Pro: Cache de fragmentos

    cache de fragmentos é uma característica Reat on Rails Pro. Cache de fragmentos é um grande impulsionador de desempenho para seus aplicativos. Use the cached_react_component and cached_react_component_hash. O API é o mesmo que react_component e react_component_hash, mas para 2 diferenças:

    1. cache_key tem os mesmos parâmetros como qualquer Rails cache view helper.
    2. Os adereços são passados através de um bloco de modo que a avaliação dos adereços não é feita a menos que o cache seja quebrado. Suponha que você coloca o seu cálculo de props em algum método chamado some_slow_method_that_returns_props:
    <%= cached_react_component("App", cache_key: , prerender: true) do some_slow_method_that_returns_propsend %>

    tal Cache fragmento salva o trabalho de CPU para o seu servidor web e reduz consideravelmente o tempo de pedido. Ele salta completamente os custos de avaliação de:

    1. chamadas de banco de dados para calcular OS adereços.
    2. Serialization the props values hash into a JSON string for evaluating JavaScript to server render.
    3. custos associados à avaliação de JavaScript a partir do seu código Ruby.
    4. criando o texto HTML contendo os adereços e o código JavaScript renderizado pelo servidor.Nota: Mesmo sem a representação do servidor (sem o Passo 3 acima), o Cache de fragmentos ainda é eficaz.

      Pro: integração com o nó.js for Server Rendering

      Default server rendering is done by ExecJS. Se quiser usar um nó.servidor js para melhor desempenho de desenho do servidor, e-mail [email protected]. ShakaCode construiu um servidor de renderização de nó premium que faz parte do Reat on Rails Pro.

      Testimonials for ShakaCode

      HVMN Testimonial, by Paul Benigeri, October 12, 2018

      the price we paid for the consultation + the React on Rails pro license has already been made back a par of times from hosting fees alone. Todo o processo foi super hands off, e nossa equipe central foi capaz de se concentrar no envio de novos recursos durante esse sprint.

      ResortPass Depoimento, por Leora Juster, 10 de dezembro de 2018

      Justin e sua equipe foram fundamentais para que nos ajudem na definição de projeto de fundações e padrões para a nossa transição para a reagir a aplicação rails. Apenas três meses de trabalho com a equipe no Shaka code e temos uma página principal do nosso servidor de Aplicação renderização em velocidades exponencialmente melhoradas.

      From Joel Hooks, Co-Founder, Chief Nerd at egghead.io, 30 de janeiro de 2017:

      2017-01-30_11-33-59

      Para mais depoimentos, veja projetos ao vivo e Kudos.

      apoiantes

      as seguintes empresas suportam este projecto open source, e o ShakaCode usa os seus produtos! Justin escreve Reat on Rails on RubyMine. Usamos Scout para monitorar o desempenho ao vivo de HiChee.com, Rails AutoScale to scale the dynos of HiChee, BrowserStack to solve problems with oddball browsers.

      2019-09-24_17-48-00Scout2020-12-27_21-26-19BrowserStack

      Clube

      eu acabei de mudar ShakaCode do desenvolvimento ClubHouse do Trello. Vamos fazer isto com todos os nossos projectos. Se você quiser tentar ClubHouse e ficar 2 meses livre após o período de teste de 14 dias, Clique aqui para usar o código de referência do ShakaCode. Estamos a participar no seu fantástico programa de referências triplas, que podem ler aqui. Ao usar o nosso código de referência, vai apoiar o ShakaCode e, assim, reagir sobre carris!

      Se você gostaria de apoiar Reat on Rails e ter sua empresa listada aqui, entre em contato.Aloha e felicidades do Justin e da equipa ShakaCode!

      trabalhar connosco