diff --git a/src/YouTube.js b/src/YouTube.js index d928093..552201a 100644 --- a/src/YouTube.js +++ b/src/YouTube.js @@ -54,7 +54,9 @@ function filterResetOptions(opts) { * @param {Object} props */ function shouldResetPlayer(prevProps, props) { - return !isEqual(filterResetOptions(prevProps.opts), filterResetOptions(props.opts)); + return ( + prevProps.videoId !== props.videoId || !isEqual(filterResetOptions(prevProps.opts), filterResetOptions(props.opts)) + ); } /** diff --git a/src/Youtube.test.js b/src/Youtube.test.js index c14ba8b..0454c2e 100644 --- a/src/Youtube.test.js +++ b/src/Youtube.test.js @@ -129,6 +129,43 @@ describe('YouTube', () => { // player is destroyed & rebound, despite the changes expect(playerMock.destroy).toHaveBeenCalled(); + // and the video is updated + expect(playerMock.loadVideoById).toHaveBeenCalled(); + }); + + it('should not create and bind a new YouTube player when only playerVars.autoplay, playerVars.start, or playerVars.end change', () => { + const { rerender } = render( + , + ); + + rerender( + , + ); + + // player is destroyed & rebound, despite the changes + expect(playerMock.destroy).not.toHaveBeenCalled(); // instead only the video is updated expect(playerMock.loadVideoById).toHaveBeenCalled(); });