logo
  • Guide
  • Config
  • Plugin
  • API
  • Examples
  • Community
  • Modern.js 2.x Docs
  • English
    • 简体中文
    • English
    • Commands
      File Conventions
      src/
      App.tsx
      entry.ts
      entry.server.tsx
      modern.runtime.ts
      routes/
      *.[server|node].tsx
      api/
      lambda/*.ts
      server/
      modern.server.ts
      shared/
      config/
      html/
      favicon.*
      icon.*
      mock/
      public/
      upload/
      modern.config.ts
      Runtime
      Core
      createRoot
      render
      RuntimeContext
      Router
      router
      SSR
      NoSSR
      renderStreaming
      renderString
      createRequestHandler
      BFF
      useHonoContext
      Utility
      CSS-In-JS API
      Head
      loadable
      📝 Edit this page
      Previous pageApp.tsxNext pageentry.server.tsx

      #entry.tsx

      Normally, the routes/ and App.tsx hook files can meet our needs. When we need to add custom behavior before component rendering or take full control of the Rspack packaging entry, we can create entry.ts file in the src or entry directory. Here are two cases for discussion。

      #Add custom behavior before Render

      This is implemented in src/entry.ts as follows:

      src/entry.tsx
      import { createRoot } from '@modern-js/runtime/react';
      import { render } from '@modern-js/runtime/browser';
      
      const ModernRoot = createRoot();
      
      async function beforeRender() {
        // todo
      }
      
      beforeRender().then(() => {
        render(<ModernRoot />);
      });

      #Take full control of the Rspack entry

      When the project does not install the @modern-js/runtime dependency, src/entry.tsx? is the real Rspack packaging entry file, and you can directly organize the code like using create-react-app and other scaffolds:

      src/entry.jsx
      import React from 'react';
      import ReactDOM from 'react-dom/client';
      import App from './App';
      
      ReactDOM.createRoot(document.getElementById('root')!).render(<App />);