Чтобы сделать это "реагирующим стилем", сначала нужно создать компонент BaseListComponent
. Затем поместите перечисленные здесь функции «просмотр, фильтрация, удаление, поиск, разбиение на страницы и т. Д. c». Но всякий раз, когда вы хотите, чтобы некоторые функции вели себя по-разному для производных классов, вы помещаете в эту функцию обратный вызов.
Например:
renderView = () => { // function of BaseListComponent
const header = (
<div>--I am Header--</div>
);
const footer = () => (
<div>--------</div>
);
const letDerivedClassDecide = this.props.renderCenter();
return (
<div style={{ display: 'flex', flexDirection: 'column' }}>
{header}
{letDerivedClassDecide}
{footer}
</div>
);
}
Этот пример означает, что вы можете управлять базой c layout как вертикальный flex-div, но вы позволяете производному классу реализовать this.props.renderCenter
, чтобы его результат можно было комбинировать с basi c layout.
view = () => { // function of BaseListComponent
let someResult = 100;
someResult = this.props.view();
return someResult;
}
Та же идея, this.props.view
реализуется производным классом.
Наконец, в производном классе это будет выглядеть следующим образом:
render() { // function of DeriveComponent; can be MoviesListComponent
return (
<BaseListComponent
renderCenter={this.renderCenter}
view={this.view}
>
);
}
Обратите внимание, что производный класс на самом деле не «наследует» или расширяет базовый компонент, он просто объединяет его в функции render()
. Таким образом, BaseListComponent
и MoviesListComponent
расширяются React.Component
(или React.PureComponent
при рассмотрении проблемы производительности).