Bearbeiten: Mit der Einführung Hooks
ist es möglich, ein Lebenszyklus-Verhalten sowie den Status in den Funktionskomponenten zu implementieren. Zur Zeit
Hooks sind ein neuer Funktionsvorschlag, mit dem Sie Status- und andere Reaktionsfunktionen verwenden können, ohne eine Klasse zu schreiben. Sie werden in React als Teil von Version 16.8.0 veröffentlicht
useEffect
Der Hook kann zum Replizieren des Lebenszyklusverhaltens und useState
zum Speichern des Status in einer Funktionskomponente verwendet werden.
Grundlegende Syntax:
useEffect(callbackFunction, [dependentProps]) => cleanupFunction
Sie können Ihren Anwendungsfall in Hooks wie implementieren
const grid = (props) => {
console.log(props);
let {skuRules} = props;
useEffect(() => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
}, []); // passing an empty array as second argument triggers the callback in useEffect only after the initial render thus replicating `componentDidMount` lifecycle behaviour
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
useEffect
kann auch eine Funktion zurückgeben, die ausgeführt wird, wenn die Komponente nicht bereitgestellt wird. Dies kann verwendet werden, um Hörer abzubestellen und das Verhalten von componentWillUnmount
:
Beispiel: componentWillUnmount
useEffect(() => {
window.addEventListener('unhandledRejection', handler);
return () => {
window.removeEventListener('unhandledRejection', handler);
}
}, [])
Um useEffect
von bestimmten Ereignissen abhängig zu machen , können Sie eine Reihe von Werten bereitstellen, um nach Änderungen zu suchen:
Beispiel: componentDidUpdate
componentDidUpdate(prevProps, prevState) {
const { counter } = this.props;
if (this.props.counter !== prevState.counter) {
// some action here
}
}
Haken äquivalent
useEffect(() => {
// action here
}, [props.counter]); // checks for changes in the values in this array
Wenn Sie dieses Array einschließen, stellen Sie sicher, dass alle Werte aus dem Komponentenbereich enthalten sind, die sich im Laufe der Zeit ändern (Requisiten, Status). Andernfalls verweisen Sie möglicherweise auf Werte aus früheren Renderings.
Es gibt einige Feinheiten bei der Verwendung useEffect
; Überprüfen Sie die API Here
.
Vor v16.7.0
Die Eigenschaft von Funktionskomponenten besteht darin, dass sie keinen Zugriff auf Reacts-Lebenszyklusfunktionen oder das this
Schlüsselwort haben. Sie müssen die React.Component
Klasse erweitern, wenn Sie die Lebenszyklusfunktion verwenden möchten.
class Grid extends React.Component {
constructor(props) {
super(props)
}
componentDidMount () {
if(!this.props.fetched) {
this.props.fetchRules();
}
console.log('mount it!');
}
render() {
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
}
Funktionskomponenten sind nützlich, wenn Sie Ihre Komponente nur ohne zusätzliche Logik rendern möchten.