Функциональные компоненты похожи на функции Javascript, которые могут получать реквизиты и возвращать элементы реакции. Они не могут иметь состояния, поэтому называются компонентами без состояния.

Функциональные компоненты аналогичны функциям JavaScript. Они также могут получать props, но не могут иметь состояние. Следовательно, они называются компонентами без состояния. Однако состояние может быть достигнуто с помощью ловушки с именем useState(). Подробнее о крючках мы прочтем позже.

Давайте создадим тот же компонент Book, используя компонент функции реагирования.

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'));

Выход

Передача реквизита функциональному компоненту

props в функциональные компоненты передаются так же, как компоненты класса, но для доступа к props вы должны получить объект props через аргумент и получить доступ к реквизиту по его имени. См. пример ниже.

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'));

Выход

Вы также можете получать отдельные реквизиты по имени и обращаться к ним только по имени. Приведенный выше пример можно записать и таким образом.

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'));

Если ваш компонент заключает в себе другой компонент(ы), то эти дочерние компоненты могут быть получены с помощью специального реквизита, который называется children. Вы можете получить к ним доступ так же, как и к индексу и автору в приведенном выше примере.

Использование состояния в функциональном компоненте

Состояние используется для хранения данных в компоненте, поэтому всякий раз, когда состояние изменяется, компонент перерисовывается.

Поскольку функциональные компоненты по умолчанию не имеют состояния, они не имеют состояния, но этого можно добиться с помощью хука с именем useState()..

См. приведенный ниже пример, в котором мы визуализировали компонент Book. Этот компонент создает 2 переменные состояния, называемые index и автор, и присваивает им начальные значения «2» и «Радость». ' соответственно, и обращаться к ним по имени.

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'));

Выход

Хук useState() также дает нам обратный вызов для обновления значений переменных состояния. В приведенном выше примере setIndex и setAuthor являются обратными вызовами для index. и авторсоответственно. Вы можете вызывать эти методы для обновления их значений. После обновления компонент Book будет повторно отображаться.