Render Props — это техника передачи функции в качестве свойства компонента. Эта функция вызывается внутри компонента и возвращает элементы для рендеринга. Render Props широко используются в React для повторного использования кода и создания гибких компонентов.
Пример Render Props
class DataFetcher extends React.Component {
state = {
data: null,
};
componentDidMount() {
// Здесь происходит получение данных, например, через API
setTimeout(() => {
this.setState({ data: 'Some fetched data' });
}, 2000);
}
render() {
return this.props.render(this.state.data);
}
}
const App = () => {
return (
<DataFetcher
render={(data) => (data ? <div>{data}</div> : <div>Loading...</div>)}
/>
);
};
export default App;
В этом примере мы создали компонент DataFetcher
, который принимает функцию render
в качестве свойства. Когда данные готовы, компонент вызывает эту функцию и передает ей данные для отображения.
Композиция компонентов
Композиция компонентов — это процесс создания сложных компонентов путем объединения нескольких более простых компонентов. Этот подход облегчает повторное использование кода и делает структуру приложения более модульной.
Пример композиции компонентов
const Title = ({ text }) => <h1>{text}</h1>;
const Content = ({ children }) => <div>{children}</div>;
const Footer = ({ text }) => <footer>{text}</footer>;
const PageLayout = ({ title, children, footer }) => (
<>
<Title text={title} />
<Content>{children}</Content>
<Footer text={footer} />
</>
);
const App = () => (
<PageLayout title="Welcome!" footer="© 2023 Company Name">
<p>Main content goes here.</p>
</PageLayout>
);
export default App;
Здесь мы создали несколько простых компонентов (Title
, Content
и Footer
) и собрали их в более сложный компонент PageLayout
. Это позволяет нам легко изменять структуру страницы и повторно использовать код.
Заключение
Паттерны проектирования, такие как Render Props и композиция компонентов, являются важными инструментами для создания гибких и модульных приложений на ReactJS. Они обеспечивают повторное использование кода, упрощают структуру приложения и делают его более легким для поддержки и расширения.