Komponenty funkcyjne przypominają funkcje JavaScriptu, które mogą odbierać rekwizyty i zwracać elementy reagujące. Nie mogą mieć stanu, dlatego nazywane są komponentami bezstanowymi.

Komponenty funkcyjne działają podobnie jak funkcje JavaScript. Mogą również otrzymać props, ale nie mogą mieć stanu. Dlatego nazywane są komponentami bezstanowymi. Stan ten można jednak osiągnąć za pomocą haka zwanego useState(). Więcej o hakach przeczytamy później.

Utwórzmy ten sam komponent Book, używając komponentu funkcji reakcji.

import React from 'react';
import ReactDOM from 'react-dom';

export default function Book() {
    return <h1>This is a book</h1>
}

ReactDOM.render(<Book/>, document.getElementById('root'));

Wyjście

Przekazywanie rekwizytów do komponentu funkcji

props do komponentów funkcjonalnych przekazywane są w taki sam sposób, jak komponenty klas, ale aby uzyskać dostęp do props, musisz otrzymać obiekt props za pomocą argumentu i uzyskać dostęp do właściwości po jego nazwie. Zobacz przykład poniżej.

import React from 'react';
import ReactDOM from 'react-dom';

export default function Book(props) {
    return <div>
        <h1>This is a book with index: {props.index}</h1>
        <h2>Author: {props.author}</h2>
    </div>
}

ReactDOM.render(<Book index={1} author={'Michael'}/>, document.getElementById('root'));

Wyjście

Możesz także otrzymać indywidualne rekwizyty po imieniu i uzyskać do nich dostęp tylko po imieniu. Powyższy przykład można zapisać również w ten sposób.

import React from 'react';
import ReactDOM from 'react-dom';

export default function Book({index, author}) {
    return <div>
        <h1>This is a book with index: {index}</h1>
        <h2>Author: {author}</h2>
    </div>
}

ReactDOM.render(<Book index={1} author={'Michael'}/>, document.getElementById('root'));

Jeśli Twój komponent otacza inny(e) komponent(y), wówczas te komponenty podrzędne mogą zostać odebrane przez specjalną rekwizyt o nazwie children. Możesz uzyskać do nich dostęp w taki sam sposób, jak w przypadku indeksowania i autora w powyższym przykładzie.

Używanie stanu w komponencie funkcji

Stan służy do przechowywania danych w komponencie, więc za każdym razem, gdy stan się zmienia, komponent jest ponownie renderowany.

Ponieważ komponenty funkcjonalne są domyślnie bezstanowe, nie mają stanu, ale można to osiągnąć za pomocą haka o nazwie useState().

Zobacz poniższy przykład, w którym wyrenderowaliśmy komponent Book. Komponent ten tworzy 2 zmienne stanu zwane indeks i autor, przypisuje im początkowe wartości „2” i „Radość ' i uzyskaj dostęp do nich po nazwie.

import React, {useState} from 'react';
import ReactDOM from 'react-dom';

export default function Book() {
  const [index, setIndex] = useState('2');
  const [author, setAuthor] = useState('Joy');
  return <div>
    <h1>This is a book with index: {index}</h1>
    <h2>Author: {author}</h2>
  </div>
}

ReactDOM.render(<Book/>, document.getElementById('root'));

Wyjście

Hak useState() umożliwia nam również wywołanie zwrotne w celu aktualizacji wartości zmiennych stanu. W powyższym przykładzie setIndexi setAuthorsą wywołaniami zwrotnymi dla index i autorodpowiednio. Możesz wywołać te metody, aby zaktualizować ich wartości. Po aktualizacji komponent Book zostanie ponownie wyrenderowany.