Я пытаюсь создать повторно используемые компоненты React для большого проекта React, над которым работает моя команда.Например, у меня есть панель, которая состоит из двух подкомпонентов, каждый из которых состоит из дополнительных подкомпонентов.
Лучшее место для меня, чтобы подключиться к хранилищу Redux - это на верхнем уровне и передавать реквизиты к компонентам sub и sub-sub (я знаю, что это несколько отрицает цель Redux, но в остальном вся вещьстановится слишком сложным).
Моя проблема заключалась в том, чтобы предоставить разные селекторы для каждого из «экземпляров» этого общего компонента верхнего уровня, чтобы они могли получать разные данные.Решение, которое я придумал, заключалось в том, чтобы обернуть каждый «экземпляр» в другой компонент, который на самом деле состоял бы только из обертывания «универсального» компонента в функции HOC «connect» и передачи пользовательских селекторов через mapStateToProps
.
То есть, у меня будет «общий компонент»
// GenericPanelComponent.js
class GenericPanelComponent extends React.Component {
...
// component code
}
export default GenericPanelComponent
, тогда каждый «экземпляр» будет предоставлять различные данные через «connect»
// SpecificInstance1.js
import { connect } from 'react-redux';
import GenericPanelComponent from './GenericPanelComponent';
class SpecificInstance1 extends React.component {
// no code
}
const mapStateToProps = (state) => ({ specificInstanceData: specificInstance1Selector(state) });
export default connect(mapStateToProps)(GenericPanelComponent);
и
// SpecificInstance2.js
import { connect } from 'react-redux';
import GenericPanelComponent from './GenericPanelComponent';
// SpecificInstance2.js
class SpecificInstance2 extends React.component {
// no code
}
const mapStateToProps = (state) => ({ specificInstanceData: specificInstance2Selector(state) });
export default connect(mapStateToProps)(GenericPanelComponent);
Есть ли что-либо концептуально или архитектурно не так с этим подходом?Если да, то как подавать пользовательские селекторы Redux и данные в повторно используемые компоненты React?Спасибо за любые идеи!