Я создаю библиотеку игрока и хочет, чтобы React потока идти, как это:Реагировать более высокий порядок компонент начальных Принадлежит
PlayerHOC -> PlaylistHOC -> FooterContainer
.
Поэтому я хочу, чтобы идти в этом направлении является то, что PlayerHOC
имеет методы на нем, что PlaylistHOC
и FooterContainer
необходимость доступа (т.е. от реквизита).
Мой код:
class FooterContainer extends React.Component {
render() {
return (
<div>
<div className="jp-type-footer" >
//...
</div>
</div>
);
}
}
class FooterPlayer extends React.Component {
constructor() {
super();
this.options = {
smoothPlayBar: false,
muted: true,
//...
};
}
render() {
return (
<Player {...this.options} />
);
}
};
export const PlaylistHOC = (WrappedComponent) => class extends React.Component {
constructor(props) {
super(props);
//Add a new stateClass for the extra loop option
this.stateClass = merge({
shuffled: "state-shuffled",
loopedPlaylist: "state-loop-playlist"
}, this.props.stateClass);
}
setPlaylist =() => {}
};
export const PlayerHOC = (WrappedComponent) => class extends React.Component {
constructor(props) {
super(props);
//get passed in props from FooterPlayer and PlaylistHoc
}
play =() => {}
pause =() => {}
};
const Player = PlayerHOC(PlaylistHOC(FooterContainer));
export default connect()(FooterPlayer);
Я также пройти в реквизите от FooterPlayer
к PlayerHOC
, который работает отлично. Тем не менее, я также хочу передать реквизиты по умолчанию от PlaylistHOC
до PlayerHOC
, которые никогда не будут обновлены, и я не могу понять, как это сделать, сохраняя этот поток.
Например: const Player = PlaylistHOC(PlayerHOC(FooterContainer));
это позволит мне пройти в начальном реквизите из PlaylistHOC
и FooterPlayer
к PlayerHOC
, но тогда я не был бы в состоянии получить доступ PlayerHOC
методы, с помощью реквизита.
Как это сделать?
Хорошая идея, но оба метода возвращаются не определены. Также 'WrappedComponent()' выдает ошибку. поэтому я не думаю, что могу это сделать. –
Я также попробовал его в 'componentDidMount' –
Я просто понял, что' WrappedComponent' является ссылкой на класс, а не его экземпляром, и поскольку он полагается на прототипическое наследование, методы должны быть доступны на «прототипе». Попробуйте новый код –