>  기사  >  웹 프론트엔드  >  코드 예제를 사용한 React의 새로운 기능

코드 예제를 사용한 React의 새로운 기능

WBOY
WBOY원래의
2024-09-11 06:30:03395검색

React 19가 출시되었습니다. 여기에는 성능과 효율성을 새로운 차원으로 끌어올리는 기능이 가득합니다. 노련한 전문가이든 React를 처음 접하는 사람이든 이 업데이트는 여러분의 관심을 끌 것입니다.

먼저 새로운 React Compiler입니다. 이 악당은 빌드 시간 동안 코드를 최적화하여 앱을 더 빠르고 효율적으로 만듭니다. 더 이상 비대해진 번들로 인해 속도가 느려지는 것에 대해 걱정할 필요가 없습니다.

다음은 서버 구성 요소입니다. 이를 통해 렌더링을 서버로 오프로드하여 클라이언트 측의 작업 부하를 줄일 수 있습니다. 이는 더 빠른 로드 시간과 더 원활한 사용자 경험을 의미합니다.

그 다음에는 액션이 있습니다. 이는 상태 업데이트와 부작용을 통합하여 상태 관리를 단순화합니다. 지저분한 코드에 작별을 고하고 더욱 깔끔하고 유지 관리가 용이한 프로젝트를 만나보세요.

문서 메타데이터 관리는 또 다른 멋진 기능입니다. 이제 구성 요소 내에서 직접 제목 및 메타 태그와 같은 메타데이터를 관리할 수 있습니다. 이를 통해 SEO 작업이 간소화되고 코드베이스가 더욱 응집력 있게 됩니다.

향상된 자산 로딩을 통해 정적 자산을 보다 효율적으로 처리할 수 있어 게임 성능이 향상됩니다. 이미지, 글꼴, 기타 리소스를 더 빠르게 로드하여 앱의 반응성을 높여보세요.

새로운 후크. 이를 통해 기능적 구성 요소에 더욱 강력한 기능을 제공하여 상태 및 부작용을 쉽게 관리할 수 있습니다. 새로운 후크는 더 많은 유연성과 제어 기능을 제공하여 React 코드를 더 깔끔하고 효율적으로 만듭니다.

이러한 각 기능은 다음 섹션에서 자세히 살펴보겠습니다. 계속 지켜봐주시고 React 19의 흥미진진한 세계에 깊이 빠져들 준비를 하세요!

React 컴파일러 개선 사항

버전 19의 React Compiler는 React 개발을 더 좋게 만듭니다. React 코드를 일반 JavaScript로 변환하여 메모를 처리하고 상태 변경 및 UI 업데이트를 개선합니다. 더 이상 useMemo(), useCallback(), 메모 등을 사용할 필요가 없습니다. 컴파일러가 이를 수행하여 코드를 더 깔끔하고 빠르게 만듭니다.

이 새로운 컴파일러를 통해 React는 UI를 업데이트할 시기를 파악하여 개발을 더 쉽게 만듭니다. 이러한 개선 사항으로 인해 앱이 두 배 더 빠르게 실행될 수 있습니다. Instagram은 이미 실제 상황에서 React Compiler를 사용하여 잘 작동하고 있음을 보여주고 있습니다.

React를 처음 접하고 기본 기능을 이해하려는 경우 초보자를 위한 React Hooks의 기본 사항을 살펴보는 데 관심이 있을 수 있습니다. 이 가이드는 기능적 구성 요소에서 상태를 관리하는 데 필수적인 useState 및 useEffect와 같은 후크 사용에 대한 포괄적인 소개를 제공합니다.

다음은 컴파일러 작동 방식에 대한 간단한 예입니다.

    import React, { useState } from 'react';

    function Counter() {
      const [count, setCount] = useState(0);

      return (
        <div>
          <p>You clicked {count} times</p>
          <button onClick={() => setCount(count + 1)}>
            Click me
          </button>
        </div>
      );
    }

이 예에서 React Compiler는 Counter 구성 요소를 더 좋게 만듭니다. 추가 코드를 추가하지 않고도 상태 변경 및 업데이트를 효율적으로 처리합니다.

React Compiler는 최적화를 자동으로 수행하여 성능을 개선하고 코드 유지 관리를 더 쉽게 만듭니다. React 19는 개발 경험을 향상시키는 많은 새로운 기능을 제공합니다.

서버 구성 요소 이해

React 19의 서버 구성요소가 게임을 변화시킵니다. 서버에서 실행되고 HTML을 클라이언트에 보냅니다. 즉, 페이지 로드 속도가 빨라지고 SEO가 향상되며 사용자에게 전송되는 JavaScript가 줄어듭니다.

이러한 구성 요소는 리소스가 많이 필요하거나 페이지가 표시되기 전에 완료해야 하는 작업에 적합합니다. 이를 서버에서 처리하면 앱의 효율성이 더욱 높아집니다.

서버 구성요소는 Next.js와 원활하게 통합됩니다. 구성요소가 서버에서 실행되어야 함을 지정하기 위해 'use server' 지시어를 사용합니다. 이렇게 하면 클라이언트측 코드가 가볍고 산뜻하게 유지됩니다.

다음은 간단한 예입니다.

    // server.js
    import { useServer } from 'react';

    function ServerComponent() {
      useServer();

      const data = fetchDataFromAPI(); // Assume this fetches data from an API

      return (
        <div>
          <h1>Data from Server</h1>
          <p>{data}</p>
        </div>
      );
    }

    export default ServerComponent;

이 예에서 ServerComponent는 서버의 API에서 데이터를 가져옵니다. 그런 다음 HTML이 클라이언트로 전송되어 페이지 로드 속도가 빨라집니다. 클라이언트측 JavaScript가 데이터를 가져올 때까지 기다릴 필요가 없습니다.

서버 구성요소는 API 호출과 같은 서버 측 작업을 더욱 효율적으로 만듭니다. 페이지가 전달되기 전에 서버에서 이를 처리하면 사용자가 더 빠르고 원활한 경험을 얻을 수 있습니다.

JavaScript 애플리케이션을 더욱 최적화하는 데 관심이 있는 경우 로드 시간과 성능을 향상시키기 위해 코드 분할 기술을 익히는 것을 고려해 보세요.

간단히 말하면 서버 구성 요소는 React 앱을 더 빠르고 효율적으로 만듭니다. 클라이언트 측 작업 부하를 줄이고 SEO를 개선하며 페이지 로드 속도를 높입니다. 다음 프로젝트에서 시도해 보세요.

액션으로 양식 처리 단순화

React 19의 Actions를 사용하면 양식 처리가 더 쉬워집니다. 이는 onSubmit을 대체하고 서버측 실행을 위해 HTML 양식 속성을 사용하여 클라이언트 또는 서버측에서 동기화 및 비동기 작업을 모두 처리합니다.

작업을 수행하면 보류 상태가 됩니다. 양식을 제출하면 요청 시작 시 활성화되고 최종 상태 업데이트 후 재설정됩니다. 이렇게 하면 데이터가 변경되는 동안 UI의 응답성이 유지됩니다.

Here's how to use Actions in a form:

    import React from 'react';

    function MyForm() {
      return (
        <form action="/submit" method="post">
          <label>
            Name:
            <input type="text" name="name" />
          </label>
          <button type="submit">Submit</button>
        </form>
      );
    }

    export default MyForm;

In this example, the action attribute handles data submission. This setup works for client and server-side operations without extra JavaScript for the onSubmit event.

Actions improve data management and interactions on web pages. Using HTML form attributes simplifies state updates and keeps the UI interactive. As a result, forms become easier to handle and less likely to break.

React 19's Actions help developers write simpler code and improve performance. Try Actions in your next project - you might find it makes things work better.

What

Managing Document Metadata

React 19 makes managing document metadata a breeze with the new component. This feature allows you to include titles and meta tags directly within your React components. It simplifies SEO and makes your code more cohesive.

Here's a quick example:

    import React from 'react';
    import { DocumentHead } from 'react';

    function MyPage() {
      const pageTitle = "Welcome to My Page";
      const pageDescription = "This is an example page showing off React 19's new DocumentHead component.";

      return (
        <div>
          <DocumentHead>
            <title>{pageTitle}</title>
            <meta name="description" content={pageDescription} />
          </DocumentHead>
          <h1>{pageTitle}</h1>
          <p>{pageDescription}</p>
        </div>
      );
    }

    export default MyPage;

In this snippet, is used to set the page title and description dynamically. This approach streamlines SEO tasks by centralizing metadata management within your components.

Dynamic metadata changes based on the application state, something that was cumbersome with libraries like React Helmet. Now, React 19 handles it natively, making your SEO practices more efficient.

Using ensures your app's metadata is always up-to-date and consistent. This is crucial for improving search engine rankings and providing a better user experience.

For those interested in how modern JavaScript features can further optimize your web applications, understanding techniques like tree shaking to eliminate dead code is essential. This optimization technique, particularly useful in conjunction with ES6 modules, can significantly enhance performance by reducing the final bundle size.

React 19's component makes it easier to manage document metadata directly within your components. It simplifies SEO, enhances accessibility, and ensures a cohesive codebase.

Improved Web Components Integration

React 19 makes integrating Web Components easier. You can now use custom elements, shadow DOM, and HTML templates without extra packages or conversions. This boosts flexibility and compatibility in frontend development.

Web Components let you create reusable components with standard HTML, CSS, and JavaScript. React 19's improved support means you can drop these straight into your React projects. This reduces friction and simplifies your development process.

Here's a basic example of how to incorporate a Web Component into a React app:

First, define your Web Component:

    // my-web-component.js
    class MyWebComponent extends HTMLElement {
      constructor() {
        super();
        const shadow = this.attachShadow({ mode: 'open' });
        shadow.innerHTML = `
          <style>
            p {
              color: blue;
            }
          </style>
          <p>Hello from Web Component!</p>
        `;
      }
    }

    customElements.define('my-web-component', MyWebComponent);

Next, use this Web Component in your React component:

    import React from 'react';
    import './my-web-component.js';

    function App() {
      return (
        <div>
          <h1>React and Web Components</h1>
          <my-web-component></my-web-component>
        </div>
      );
    }

    export default App;

In this example, MyWebComponent is defined with a shadow DOM and some styles. It's then used in the App component like any other HTML element. No extra libraries or tools are needed.

This seamless integration lets you leverage the power of Web Components within your React projects. It’s a great way to reuse code and maintain consistency across different parts of your application.

React 19's enhanced support for Web Components opens up new possibilities for your development workflow. You get the best of both worlds: React's powerful ecosystem and the flexibility of custom elements. Give it a try in your next project.

Optimized Asset Loading

Asset loading in React 19 significantly improves. It makes loading images, scripts, stylesheets, and fonts faster and more efficient. By using features like Suspense and new Resource Loading APIs (preload and preinit), you can ensure your assets load in the background, reducing wait times and improving user experience.

Suspense helps you load components or assets in the background, showing a fallback UI until everything is ready. This keeps your app responsive and smooth.

Here's a basic example:

    import React, { Suspense, lazy } from 'react';

    const LazyImage = lazy(() => import('./LazyImage'));

    function App() {
      return (
        <div>
          <h1>Optimized Asset Loading</h1>
          <Suspense fallback={<div>Loading...</div>}>
            <LazyImage />
          </Suspense>
        </div>
      );
    }

    export default App;

In this code, LazyImage loads in the background, and a fallback UI appears until it's ready. This improves the perceived performance and keeps users engaged.

The preload and preinit APIs let you control when and how assets load, ensuring critical resources are available when needed.

Here's an example of using preload:

    <link rel="preload" href="/path/to/image.jpg" as="image">
    <link rel="preload" href="/path/to/style.css" as="style">

In this HTML snippet, the preload attribute ensures the image and stylesheet load early, reducing the time users wait for these resources.

Using preinit is similar. It preloads scripts to ensure they're ready when needed:

    <link rel="preinit" href="/path/to/script.js" as="script">

By using these techniques together, you can load critical assets efficiently, reducing page load times and improving the overall user experience. React 19's enhanced asset loading capabilities make it easier to build fast, responsive applications.

For more insights on optimizing your JavaScript modules, you might find it useful to read my detailed comparison on using require vs import in JavaScript. These features improve user experience and engagement. React 19's optimized asset loading is one of many improvements to the development process.

New Hooks in React 19

React 19 brings some exciting new hooks to the table that make handling state and async operations easier. Let’s dive into these new hooks: useOptimistic, useFormStatus, useFormState, and use.

useOptimistic: This hook helps manage optimistic UI updates. It allows your UI to update immediately, even before the server confirms the changes. This makes your app feel faster and more responsive.

    import { useOptimistic } from 'react';

    function LikeButton({ postId }) {
      const [isLiked, setIsLiked] = useOptimistic(false);

      const handleLike = async () => {
        setIsLiked(true);
        await api.likePost(postId);
      };

      return (
        <button onClick={handleLike}>
          {isLiked ? 'Liked' : 'Like'}
        </button>
      );
    }

useFormStatus: This hook keeps track of the status of form fields. It’s great for showing loading states or validation messages.

    import { useFormStatus } from 'react';

    function MyForm() {
      const { isSubmitting, isValid } = useFormStatus();

      return (
        <form action="/submit" method="post">
          <label>
            Name:
            <input type="text" name="name" />
          </label>
          <button type="submit" disabled={isSubmitting || !isValid}>
            {isSubmitting ? 'Submitting...' : 'Submit'}
          </button>
        </form>
      );
    }

useFormState: This one helps manage the state of your forms. It updates state based on form actions, simplifying form management.

    import { useFormState } from 'react';

    function ContactForm() {
      const { values, handleChange } = useFormState({
        name: '',
        email: '',
      });

      return (
        <form>
          <label>
            Name:
            <input type="text" name="name" value={values.name} onChange={handleChange} />
          </label>
          <label>
            Email:
            <input type="email" name="email" value={values.email} onChange={handleChange} />
          </label>
          <button type="submit">Submit</button>
        </form>
      );
    }

use: This hook simplifies working with promises and async code. It fetches and utilizes resources within components, reducing boilerplate code.

    import { use } from 'react';

    function UserProfile({ userId }) {
      const user = use(fetchUserProfile(userId));

      return (
        <div>
          <h1>{user.name}</h1>
          <p>{user.bio}</p>
        </div>
      );
    }

These new hooks in React 19 make your code cleaner and more efficient. They simplify state management and async operations, making development smoother. Try them out in your next project!

Using the Use() Hook

React 19 introduces the use() hook, making handling promises and async operations a breeze. This hook lets you fetch data and manage async tasks directly within your components, cutting down on boilerplate code.

Here's a basic example to get you started:

    import { use } from 'react';

    function UserProfile({ userId }) {
      const user = use(fetchUserProfile(userId));

      return (
        <div>
          <h1>{user.name}</h1>
          <p>{user.bio}</p>
        </div>
      );
    }

In this example, use() fetches user data from an async function fetchUserProfile. The fetched data is then used directly within the component, making the code cleaner and more straightforward.

You can also use use() for more complex operations, such as fetching multiple resources:

    import { use } from 'react';

    function Dashboard() {
      const user = use(fetchUser());
      const posts = use(fetchPosts(user.id));

      return (
        <div>
          <h1>Welcome, {user.name}</h1>
          <ul>
            {posts.map(post => (
              <li key={post.id}>{post.title}</li>
            ))}
          </ul>
        </div>
      );
    }

Here, use() first fetches user data, then fetches posts based on the user ID. This chaining of async operations keeps your component logic tidy and easy to follow.

The use() hook can even handle conditional logic:

    import { use } from 'react';

    function Notifications({ userId }) {
      const notifications = use(userId ? fetchNotifications(userId) : Promise.resolve([]));

      return (
        <ul>
          {notifications.map(note => (
            <li key={note.id}>{note.message}</li>
          ))}
        </ul>
      );
    }

In this snippet, use() fetches notifications only if userId is provided. Otherwise, it returns an empty array. This makes the component logic adaptable and concise.

React 19's use() hook simplifies async data handling, making your code cleaner and more maintainable. Try it out to streamline your next project!

Form Handling with useFormStatus and useFormState

Form handling in React 19 gets a significant boost with the introduction of useFormStatus and useFormState. These hooks simplify managing form submission status and state updates, making your forms more efficient and user-friendly.

The useFormStatus hook keeps track of the form's submission status. It helps display pending states and handle submission results. This means your users get immediate feedback, enhancing their experience.

Here's a quick example of useFormStatus in action:

    import { useFormStatus } from 'react';

    function MyForm() {
      const { isSubmitting, isValid } = useFormStatus();

      return (
        <form action="/submit" method="post">
          <label>
            Name:
            <input type="text" name="name" />
          </label>
          <button type="submit" disabled={isSubmitting || !isValid}>
            {isSubmitting ? 'Submitting...' : 'Submit'}
          </button>
        </form>
      );
    }

In this example, useFormStatus provides isSubmitting and isValid states. The button disables while submitting, giving users clear feedback.

Next, the useFormState hook manages form state based on form actions. It updates state efficiently, keeping your code clean and maintainable.

Here’s how you can use useFormState:

    import { useFormState } from 'react';

    function ContactForm() {
      const { values, handleChange } = useFormState({
        name: '',
        email: '',
      });

      return (
        <form>
          <label>
            Name:
            <input type="text" name="name" value={values.name} onChange={handleChange} />
          </label>
          <label>
            Email:
            <input type="email" name="email" value={values.email} onChange={handleChange} />
          </label>
          <button type="submit">Submit</button>
        </form>
      );
    }

In this snippet, useFormState helps manage the form's input values. The handleChange function updates the state, making form handling straightforward.

For more advanced techniques in managing your codebase, you might find my Git Cheat Sheet useful. It covers foundational commands, branching, merging, and more.

useFormStatus and useFormState streamline form management. They provide a more responsive and intuitive experience for both developers and users. Try these hooks in your next project to see how they can simplify your form handling.

What

Optimistic UI with useOptimistic

The useOptimistic hook in React 19 new features makes handling UI updates during async operations easier. It lets your UI show changes instantly, even before the server confirms them. This is called optimistic UI, and it makes your app feel faster and more responsive.

With useOptimistic, your interface updates right away while the async task runs in the background. If something goes wrong, you can undo the changes. This quick feedback keeps users engaged and makes wait times feel shorter.

Here's a simple example of how it works:

    import { useOptimistic } from 'react';

    function LikeButton({ postId }) {
      const [isLiked, setIsLiked] = useOptimistic(false);

      const handleLike = async () => {
        setIsLiked(true);
        try {
          await api.likePost(postId);
        } catch (error) {
          setIsLiked(false); // Undo if the request fails
        }
      };

      return (
        <button onClick={handleLike}>
          {isLiked ? 'Liked' : 'Like'}
        </button>
      );
    }

In this example, the LikeButton component uses useOptimistic to update the like state right when the button is clicked. If the api.likePost call fails, it reverts the state, keeping data consistent.

Using useOptimistic makes your app feel snappier and more interactive. Users get instant feedback, creating a smoother experience. This hook is great for actions like liking a post, adding items to a cart, or any task where quick feedback matters.

React 19's useOptimistic hook makes it easier to implement optimistic UI, helping you build more engaging and user-friendly apps. For more insights on integrating design into your development process, check out my article on how Agile methodologies should not exclude design. Give it a try in your next project - you'll quickly see how it improves things.

Steps to Upgrade to React 19

Upgrading to React 19 is straightforward. Follow these steps to ensure a smooth transition:

  1. Update Dependencies: First, update React and ReactDOM to the latest version. Run the following command in your project directory:
    npm install react@19 react-dom@19
  1. Check for Deprecated Features: Go through the release notes for React 19. Identify any deprecated features and update your code accordingly. This step is crucial to avoid any surprises during the upgrade.
  2. Run Tests: Ensure your test suite passes with the new version. Running your tests early helps catch any potential issues that the upgrade might introduce. Use the following command to run your tests:
    npm test
  1. Monitor Performance: After upgrading, keep an eye on your application's performance. Look out for any regressions. Tools like React Profiler can help you monitor performance changes.
    import { Profiler } from 'react';

    function App() {
    return (

    <Profiler
      id="App"
      onRender={(id, phase, actualDuration) => {
        console.log({ id, phase, actualDuration });
      }}
    >
      <YourComponent />
    </Profiler>
    ); }
  1. Fix Any Issues: Address any problems that arise during testing and performance monitoring. Make sure your application runs smoothly with React 19.

If you're interested in the tools and technologies I use to enhance productivity and creativity in my development workflow, check out my curated list of technology and equipment.

Following these steps will help you upgrade to React 19 without major hiccups. Happy coding!

Wrapping Up React 19 Features

React 19 brings a host of new features that make development smoother and more efficient. The new React Compiler automatically optimizes your code, speeding up your apps without extra effort. Server Components shift heavy lifting to the server, resulting in faster load times and better SEO.

Actions simplify state management, making your code cleaner and more maintainable. Document Metadata Management streamlines SEO tasks by letting you manage titles and meta tags directly within your components. Enhanced Asset Loading makes your app more responsive by efficiently handling static resources.

The introduction of new hooks like useOptimistic, useFormStatus, useFormState, and use provide more flexibility and control in functional components. These hooks simplify async operations and state management, making your code cleaner and more efficient.

Overall, React 19's updates focus on improving performance and developer experience. Whether you're optimizing assets, managing metadata, or handling async operations, these new features help you build faster, more efficient applications. Give React 19 a go in your next project and experience the improvements firsthand.

If you enjoyed this post, I bet you'll enjoy the weekly newsletter I send out to hundreds of other developers such as yourself! Check it out!

위 내용은 코드 예제를 사용한 React의 새로운 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.