shouldComponentUpdate to plug time-based rerenders?

This commit is contained in:
James Barnsley
2020-09-20 21:04:40 +12:00
parent 59d73d409d
commit 9a3b9cb1bf
16 changed files with 379 additions and 226 deletions

View File

@ -11,6 +11,8 @@ import * as spotifyActions from '../services/spotify/actions';
import * as mopidyActions from '../services/mopidy/actions';
import { i18n, I18n } from '../locale';
import Button from '../components/Button';
import { arrayOf } from '../util/arrays';
import { getItemsFromIndex } from '../util/selectors';
class QueueHistory extends React.Component {
componentDidMount() {
@ -19,6 +21,12 @@ class QueueHistory extends React.Component {
this.loadHistory();
}
shouldComponentUpdate = ({ tracks: nextTracks }) => {
const { tracks } = this.props;
return nextTracks.length !== tracks.length;
}
loadHistory = () => {
const {
mopidyActions: {
@ -26,8 +34,6 @@ class QueueHistory extends React.Component {
},
} = this.props;
console.log('get queue history');
getQueueHistory();
}
@ -38,8 +44,7 @@ class QueueHistory extends React.Component {
render = () => {
const {
queue_history,
items,
tracks,
uiActions,
} = this.props;
@ -56,13 +61,6 @@ class QueueHistory extends React.Component {
</Button>
);
if (!queue_history) return null;
const tracks = queue_history.map((item) => ({
...item,
...(items[item.uri] || {}),
}));
return (
<div className="view queue-history-view">
<Header options={options} uiActions={uiActions}>
@ -70,25 +68,41 @@ class QueueHistory extends React.Component {
<Icon name="play_arrow" type="material" />
</I18n>
</Header>
<section className="content-wrapper">
<TrackList
uri="iris:queue-history"
className="queue-history-track-list"
track_context="history"
tracks={tracks}
show_source_icon
/>
</section>
{tracks && (
<section className="content-wrapper">
<TrackList
uri="iris:queue-history"
className="queue-history-track-list"
track_context="history"
tracks={tracks}
show_source_icon
/>
</section>
)}
</div>
);
}
}
const mapStateToProps = (state) => ({
items: state.core.items,
queue_history: state.mopidy.queue_history,
});
const mapStateToProps = (state) => {
const {
mopidy: {
queue_history,
},
} = state;
const uris = arrayOf('uri', queue_history);
const storedTracks = getItemsFromIndex(state, uris);
const tracks = queue_history.map((item) => ({
...item,
...(storedTracks[item.uri] || {}),
}));
return {
tracks,
};
};
const mapDispatchToProps = (dispatch) => ({
uiActions: bindActionCreators(uiActions, dispatch),