Open
Conversation
…ase performance. Added a provider to allow slate to react to form events.
Test summaryRun details
View run in Cypress Dashboard ➡️ This comment has been generated by cypress-bot as a result of this project's GitHub integration settings. You can manage this integration in this project's settings in the Cypress Dashboard |
haattis
reviewed
Dec 30, 2021
Contributor
haattis
left a comment
There was a problem hiding this comment.
Har testet og alt ser ut til å fungere fint! Har en liten kommentar bare :)
| import { useTranslation } from 'react-i18next'; | ||
| import Contributor from './Contributor'; | ||
| import { ContributorType, ContributorFieldName } from './types'; | ||
| import { ContributorType as ContributorTypeName } from '../../interfaces'; |
Contributor
There was a problem hiding this comment.
Foreslår å endre navn på typene for å unngå to exports med samme navn.
Contributor
Author
|
Har vi lyst til å gjøre noe med dette? Formik virker ikke altfor aktivt om dagen. RHF brukes også i ndla-frontend. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Denne PR'en erstatter bruken av Formik i
ImageFormmed react-hook-form. Størrelsen på PR'en er ikke nødvendigvis representativ, da den inneholder en del filer som måtte "klones" for å slippe unna Formik.Grunnen til at denne overgangen er interessant er at react-hook-form i mye større grad unngår rerenders når et form oppdateres. Vårt tidligere bruk av Formik førte til at hele siden ble rerendret hver gang det oppsto en endring i et felt. I React-hook-form skjer dette kun ved første tastetrykk i et felt. Forskjellene kan testes ut ved å åpne konsollen, navigere til en react-dev-tools-fane og sjekke "Highlight updates when components render".
React-hook-formhar ikkesetStatus, som vi har brukt til å eksplisitt fortelle Slate at en ny verdi skal tas i bruk når et form resettes til en tidligere versjon. Jeg endte opp med å lage en Provider som dispatcher events som kan lyttes på. Inntil videre opprettes en slik provider på toppen av hvert form i applikasjonen, slik at vi slipper å legge til flere globale providers. Inntil videre kan den legges inn v.h.awithFormEventsProvider, sånn at det er mest mulig "plug-and-play".Det ser også ut som at react-hook-form er såpass god til diffing at vi ikke trenger å bruke
isFormikFormDirty, men det kan hende at @haattis har andre meninger der. Krysser fingrene.FormFielder ment til å erstatteFormikField, bare at den ikke defaulter tilInputdersomchildrenikke passeres. Man må alltid spesifisere hva som skal rendres, men dette kan fint endres. For å få til ordentlig typing av returverdiene tilchildren-funksjonen måtte jeg ty til litt kreativ typing, da typene til react-hook-form ikke ville godta måten vi tar i brukDescendantpå.Etter denne overgangen er flaskehalsen for et form nedtrekkspaneler. Når en accordion åpnes eller lukkes rerendres hele formet. Hele formet blir også rerendret hver gang et felt endrer gyldighet (valid->invalid / invalid->valid). Sistnevnte kan kanskje ordnes med memoization, det har jeg ikke fått sett på ennå. Førstnevnte vil være mer utfordrende, og kan heller tas på et annet tidspunkt. Da burde man også se på hvordan en
AccordionSectionblir rendret. Slik det er nå blir den gjenskapt hver gang en seksjon blir åpnet, som fører til unødvendige API-kall og renders.