Презентационные компоненты обычно отвечают за отрисовку элементов пользовательского интерфейса на экране. Они получают данные и обратные вызовы в качестве пропсов. Обычно они сосредоточены на рендеринге JSX и не знают о состоянии или действиях приложения.
Вот пример презентационного компонента:
import React from "react"
function Button(props) {
return <button>{props.label}</button>
}
Компоненты-контейнеры обычно отвечают за управление состоянием и действиями. Они содержат логику для выборки данных, обработки пользовательского ввода и выполнения других задач. Они знают о состоянии и действиях приложения и передают данные и обратные вызовы презентационным компонентам через пропсы. Вот пример компонента-контейнера:
import React, { Component } from "react"
import Button from "./Button"
class Form extends Component {
state = {
name: "",
}
handleChange = (event) => {
this.setState({ name: event.target.value })
}
handleSubmit = (event) => {
event.preventDefault()
// отправка формы
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.name} onChange={this.handleChange} />
</label>
<Button label="Submit" />
</form>
)
}
}
Разделение презентационных и контейнерных компонентов может помочь упростить понимание, тестирование и поддержку вашего кода за счет отделения задач, связанных с тем, как вещи выглядят, от того, как они работают.