关于react.js:React-18-的新更新和使用之新-API

33次阅读

共计 3433 个字符,预计需要花费 9 分钟才能阅读完成。

React 18 的新更新和应用之新 API

React 是一个由 Facebook 推出的 JavaScript 库,被广泛应用于构建 Web 应用程序和用户界面。随着工夫的推移,React 一直地进行更新和改良,以更好地反对最新的技术和开发模式。React 18React 的最新版本,它引入了一些新的性能和 API,使得开发者能够更加轻松、高效地构建可保护和高性能的应用程序。本文将深入探讨 React 18 的新更新和应用之新 API

React 18 的新更新

React 18 引入了一些新的更新,这些更新波及到 React 外围库的改良和优化,以及一些全新的性能和工具的增加。以下是一些重要的更新:

Suspense for Data Fetching
React 18 引入了一个名为 ” 数据获取暂停(Suspense for Data Fetching)” 的新个性,它容许咱们在组件外部应用异步数据获取,并在期待数据返回时显示一个自定义的加载指示器。这能够大幅提高应用程序的响应速度和用户体验。例如:

import {Suspense} from 'react';
import {fetchData} from './api';

function App() {
  return (
    <div>
      <Suspense fallback={<div>Loading...</div>}>
        <MyComponent data={fetchData()} />
      </Suspense>
    </div>
  );
}

在下面的例子中,咱们应用 Suspense 组件来包装 MyComponent,并传递一个自定义的加载指示器作为 fallback 属性。MyComponent 通过 fetchData 函数来获取数据,在数据返回前将显示 Loading...

Concurrent Rendering
React 18 引入了一个名为 ” 并发渲染 (Concurrent Rendering)” 的新个性,它能够让 React 在渲染时优先解决更重要的工作,从而进步应用程序的性能和用户响应速度。这种办法能够使 React 更加智能地治理和利用计算机资源,以确保应用程序始终保持晦涩。例如:

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

  useEffect(() => {setTimeout(() => {setCount(1);
    }, 1000);
  }, []);

  return <div>{count}</div>;
}

在下面的例子中,咱们应用 useStateuseEffect 来更新 count 变量。因为 setTimeout 函数的提早成果,咱们能够看到 count 变量的值从 0 到 1 的变动。在 Concurrent Rendering 的状况下,React 会依据须要决定何时更新 count 变量,并在不影响其余组件的状况下进行优化。

Automatic Batching of State Updates
React 18 引入了一个名为 ” 状态更新主动批处理(Automatic Batching of State Updates)” 的新个性,它能够主动将多个间断的状态更新批处理成一个独自的更新,从而缩小 ReactDOM 的操作次数,进步应用程序的性能和响应速度。例如:

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

  function handleClick() {setCount((prevCount) => prevCount + 1);
    setCount((prevCount) => prevCount + 1);
    setCount((prevCount) => prevCount + 1);
  }

  return <button onClick={handleClick}>{count}</button>;
}

在下面的例子中,咱们定义了一个 handleClick 函数,它间断调用了三次 setCount 函数,每次都将 count 变量减少 1。在 Automatic Batching 的状况下,React 会将这三个更新批处理成一个独自的更新,从而防止了多余的 DOM 操作。

React 18 的新 API

React 18 还引入了一些新的 API,这些 API 能够帮忙开发者更灵便、高效地构建组件,并实现更多样化的性能和交互成果。以下是一些重要的新 API

useTransition
useTransition 是一个新的 Hook,能够让咱们在组件状态变动时增加过渡成果,使得应用程序更具动态性和视觉吸引力。例如:

import {useTransition, animated} from 'react-spring';

function App() {const [isToggled, setIsToggled] = useState(false);
  const transitions = useTransition(isToggled, null, {from: { opacity: 0},
    enter: {opacity: 1},
    leave: {opacity: 0},
  });

  return (
    <div>
      {transitions.map(({ item, key, props}) =>
        item ? (<animated.div key={key} style={props}>
            Toggled On
          </animated.div>
        ) : (<animated.div key={key} style={props}>
            Toggled Off
          </animated.div>
        )
      )}
      <button onClick={() => setIsToggled((prev) => !prev)}>Toggle</button>
    </div>
  );
}

在下面的例子中,咱们应用 useTransition Hook 和 animated 组件来实现一个简略的过渡成果。当点击 Toggle 按钮时,应用程序会从 Toggled Off 到 Toggled On 进行平滑的过渡。

createRoot
createRoot 是一个新的 API,能够让咱们将 React 应用程序挂载到任意 DOM 节点上,而不仅仅是 document.body。这能够使咱们更灵便地管制 React 应用程序的渲染和布局形式。例如:

import {createRoot} from 'react-dom';

const container = document.createElement('div');
document.body.appendChild(container);

const root = createRoot(container);

root.render(<App />);

在下面的例子中,咱们应用 createRoot API 来将 React 应用程序挂载到一个自定义的容器节点上。

createEventHandle
createEventHandle 是一个新的 API,能够让咱们创立可复用的事件处理程序,并将其作为属性传递给其余组件。这能够使咱们更高效地构建和治理组件,防止代码冗余和反复。例如:

import {createEventHandle} from 'react';

const useClickHandler = createEventHandle();

function Button() {const handleClick = () => {useClickHandler();
  };

  return <button onClick={handleClick}>Click Me</button>;
}

function App() {const handleClick = () => {console.log('Clicked!');
  };

  useClickHandler.listen(handleClick);

  return <Button />;
}

在下面的例子中,咱们应用 createEventHandle API 来创立一个名为 useClickHandler 的事件处理程序,并将其作为属性传递给 Button 组件。Button 组件会触发 useClickHandler 事件,而 App 组件则会监听 useClickHandler 事件,并在事件产生时打印日志。

论断

React 18 引入了一些新的更新和 API,这些更新和 API 能够帮忙开发者更灵便、高效地构建可保护和高性能的应用程序。在应用 React 18 进行开发时,咱们应该相熟各种技术和概念,并遵循最佳实际来编写高效、强壮和牢靠的代码。同时,咱们也应该关注 React 生态系统的其余相干工具和库,以便更好地反对咱们的开发工作。

正文完
 0