Solutions. For Life.

From Svelte to React

posted on: 7/3/2023, 8:42:50 PM

last updated: 7/4/2023, 9:13:52 PM

by:

Reading Time: less than a minute read

NOTE: This entry is in a preview state. It may not be complete yet,

Contents

Creating a Web App Skaffold

    You can create Vite-based apps using the vite skaffold tool. This is the recommended way, as Vite is much faster and easier to use than webpack-based projects like create-react-app and create-svelte.
    pnpm create vite
    # follow the prompts!
    pnpm create svelte@latest my-app
    cd my-app
    pnpm install
    pnpm dev
    pnpx create-next-app

    Defining a Component

      <div class="my-component">
        Hello World!
      </div>
      function MyComponent() {
        return (
          <div class="my-component">
            Hello World!
          </div>
        )
      }

      Nesting Components

        /* myComponent.js */
        <div class="my-component">
          Hello World!
        </div>
        
        /* app.js */
        <script>
          import MyComponent from './myComponent';
        </script>
        
        <div class="app">
          This is an app!
          <MyComponent/>
        </div>
        /* myComponent.jsx */
        export default function MyComponent() {
          return (
            <div class="my-component">
              Hello World!
            </div>
          )
        }
        
        /* app.jsx */
        import MyComponent from './myComponent.js';
        export default function App() {
          return (
            <div class="app">
              This is an app!
              <MyComponent/>
            </div>
          )
        }
        

        Returning Multiple Components

          <p>
            Hello World!
          </p>
          <p>
            Nice to meet you! 
          </p>

          JSX requires a return of only one element, so you need to nest multiple elements inside a single element, such as the <React.Fragment>...</React.Fragment> element or the null-element (<>...</>)

          function MyComponent() {
            return (
              <>
                <p>
                  Hello World!
                </p>
                <p>
                  Nice to meet you! 
                </p>
              </>
            )
          }

          Styling Components

            <script>
              let borderColor = 'blue';
            </script>
            
            <p class="red-text" style:borderColor style="background-color: black; border-color: {borderColor}">
              Hello World!
            </p>
            <style>
              p.red-text {color: red;}</style>

            You can't use class in JSX, as it is a reserved word in ECMAScript. Use className instead. If you want to use inline styles, you need to use the JS properties of the style object instead of the html/css properties used in normal HTML. the style attribute takes an object, so you can pass an object

            function MyComponent() {
              let borderColor = 'blue';
              const styles={ borderColor }
              return (
                  <p className="red-text" style="{{...styles, background-color: 'black' }}">
                    Hello World!
                  </p>
              )
            }

            Displaying Variables

            Conditional Rendering

            Rendering Data Structures

            Passing Props to Components

            Event Raising and Handling

            Handling Component State

            Using Framework-Specific Features

            use* function in react.

            https://github.com/joshnuss/react-hooks-in-svelte

            Render Caching

            useCallback in react. Completely not necessary in svelte. use stores to save state.

            Sharing State Between Components

            Fallbacks While Loading Data

            React's <Suspense> element

            Server-Side Components

            use client/server in react. +server.js in sveltekit.