React - L'utilisation de useMemo() entraîne toujours un ralentissement de la saisie au clavier
P粉340264283
P粉340264283 2023-09-03 17:16:59
0
1
403
<p>J'ai ce code, qui comporte de nombreuses zones de saisie, chaque zone de saisie est utilisée pour modifier une valeur de prix. Comme il y a beaucoup de zones de saisie (3 prix par zone et 3 prix par prix), pour éviter de tout restituer à chaque fois, j'ai utilisé useMemo sur la fonction qui met à jour la valeur de la zone de saisie, et en plus de a également utilisé useReducer pour éviter que le code ne soit trop long pour contrôler la zone de saisie. </p> <p>Cependant, la saisie de caractères (ou de chiffres) ne s'affiche pas instantanément, mais prend un court laps de temps pour s'afficher, sans parler d'une saisie continue. </p> <pre class="brush:php;toolbar:false;">const handleUpdate = useMemo( () => (propriété, valeur, obid) => dispatch({ type : "UPDATE_DATA", propriété, charge utile : valu, id : obid }); }, [expédition] );</pré> <p>Et il y a un réducteur : </p> <pre class="brush:php;toolbar:false;">function réducteur (état, action) { commutateur (action.type) { ... cas "UPDATE_DATA" : retour { ...État, données : state.data.map((élément) => { if (item.id === action.id) { return { ...item, [action.property] : action.payload } ; } retourner l'objet; }), } ; } }</pré> <p>Je recommande de vérifier l'intégralité du code, car le problème (ou la solution) peut résider ailleurs. Afin de voir l'intégralité du code, vous pouvez vous référer à ce lien sandcodebox. Veuillez me pardonner d'avoir copié une partie du code, ce qui a entraîné un mauvais format CSS. Notez que la fonction fetch a été remplacée par un long tableau de données simulées. </p> <p>Lien : https://codesandbox.io/s/unruffled-feynman-g9nox2?file=/src/App.js</p>
P粉340264283
P粉340264283

répondre à tous(1)
P粉420868294

通常,useMemo 的作用是在渲染期间缓存昂贵计算的值。然而,在您的情况下,您没有任何昂贵的渲染计算;每次输入更改时,您只是渲染一个非常大的树。实际上,因为所有状态都在App组件上,所以每次都会重新渲染整个应用。

在React中优化这个问题的方法是尽可能跳过渲染组件。为此,将页面的不相关部分拆分为不同的组件。一旦分离逻辑,用React.memo()包装它,这是一种可以完全跳过组件渲染的不同优化技术。

对我来说,您可以做出的最明显的更改是:

  1. TodosDatos移出App组件,因为它是常量,不需要在每次渲染时重新定义(这可能会占用内存)。
  2. 将您的<Table>放入一个新的组件中,并使用React.memo()进行记忆。确保将所有表格的依赖值传递给新组件的props。

我在这里实现了这些更改:https://codesandbox.io/s/green-breeze-mmum6n?file=/src/App.js。现在您应该注意到键入几乎是即时的。您还可以在其他地方进行多次优化,以获得更好的性能。

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!