Kezelje a 'componentWillReceiveProps' deprecation warning

A Reactban az aszinkron renderelés megvalósításának részeként van néhány életciklus-módszer, amelyek a React 17-ben elavulttá válnak (lásd React Blog). Egy gyakran használt közülük a componentWillReceiveProps. A legtöbb esetben egy komponens
props változásának kezelésére használják.

Tehát mit tegyünk?

Az egyik megoldás a static getDerivedStateFromProps metódus használata. Van egy nagyszerű ‘HowTo’ dev.to Post Larry Price-tól.

A másik megoldás a React Hooks használata, különösen a useEffect() Hook. Ez egy szép megoldás lehet, ha van egy kis komponensed, és ezen a módosításon belül szeretnél átváltani egy funkcionális komponensre.

Itt egy egyszerű példa. Képzeljük el, hogy egy táblázat komponenst renderelünk egy elemeket tartalmazó listával. Minden elemnek kezdetben a doSomething() metóduson kell átfutnia.

előző kód

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

Hookokkal

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

A useEffect() Hookot használhatjuk, amely alapértelmezés szerint minden rendereléskor lefut. A felesleges hívások elkerülése érdekében a második paraméterként -t használjuk. Így a useEffect() csak akkor fut le, ha a items tulajdonság megváltozott.

Fontos megjegyzés

A getDerivedStateFromProps() vagy useEffect() váltás előtt ellenőrizni kell, hogy valóban szükség van-e erre a tulajdonságkezelésre. Nézd meg ezt a hivatalos React blogbejegyzést a gyakori hibákról és anti-patternekről.

Néha akkor is írunk néhány tulajdonságot az állapotba, ha nincs rá szükség. Ha például egy listát kell rendezni, ami egy tulajdonságból származik, akkor ezt a renderelés során tegyük meg, és ne írjuk be a komponens állapotába.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.