Handle 'componentWillReceiveProps' deprecation warning

V rámci implementace asynchronního vykreslování v Reactu existuje několik metod životního cyklu, které budou v Reactu 17 zrušeny (viz React Blog). Často používanou z nich je componentWillReceiveProps. Ve většině případů se používá ke zpracování
změny vlastností komponenty.

Co tedy dělat?“

Jedním řešením je použití metody static getDerivedStateFromProps. Existuje skvělý ‚HowTo‘ dev.to Post od Larryho Price.

Dalším řešením je použít React Hooks, zejména useEffect() Hook. To může být pěkné řešení, pokud máte malou komponentu a chcete v rámci této změny přejít na funkční komponentu.

Tady je jednoduchý příklad. Představte si, že vykreslujeme komponentu tabulky se seznamem položek. Všechny položky musí zpočátku proběhnout metodou doSomething().

předchozí kód

doSomething (items) { // some code to sort items ... return items}state = { items: this.props.items}componentWillReceiveProps (nextProps) { this.setState({ items: doSomething(nextProps.items) })}

s háčky

const doSomething = (items) => { // some code to sort items ... return items}const = useState(doSomething(props.items))useEffect(() => { setItems(defaultSorting(items))}, )

Můžeme použít háček useEffect(), který se standardně spouští při každém vykreslení. Abychom se vyhnuli zbytečným voláním, použijeme jako druhý parametr . Takže useEffect() se spustí pouze tehdy, když se změní vlastnost items.

Důležité upozornění

Před přepnutím na getDerivedStateFromProps() nebo useEffect() byste si měli ověřit, zda tuto manipulaci s vlastnostmi opravdu potřebujete. Podívejte se na tento oficiální blogpost React, kde najdete běžné chyby a anti-patterny.

Někdy zapisujeme některé vlastnosti do stavu, i když to nepotřebujeme. Pokud například potřebujete setřídit seznam, který pochází z nějaké vlastnosti, udělejte to během vykreslování a vyhněte se zápisu do stavu komponenty.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.