refract + cleanup: render only on data change

- add library for deep comparison
- cleanup console.logs
This commit is contained in:
cv
2021-06-10 13:52:48 +02:00
parent 52c8bafc2c
commit a077e126ae
4 changed files with 35 additions and 15 deletions
+1
View File
@@ -16,6 +16,7 @@
"react": "^17.0.1", "react": "^17.0.1",
"react-beautiful-dnd": "^13.1.0", "react-beautiful-dnd": "^13.1.0",
"react-dom": "^17.0.1", "react-dom": "^17.0.1",
"react-fast-compare": "^3.2.0",
"react-icons": "^4.2.0", "react-icons": "^4.2.0",
"react-qr-code": "^1.1.1", "react-qr-code": "^1.1.1",
"react-query": "^3.13.5", "react-query": "^3.13.5",
@@ -12,8 +12,6 @@ export default function LowerLines(props) {
}; };
const [showLower, setShowLower] = useState(true); const [showLower, setShowLower] = useState(true);
console.log('DEBUG TITLE SHOW:', title.showNow);
// Unmount if fadeOut // Unmount if fadeOut
useEffect(() => { useEffect(() => {
if (!options.fadeOut) return; if (!options.fadeOut) return;
@@ -1,10 +1,27 @@
import { useEffect, useState } from 'react'; import { memo, useEffect, useState } from 'react';
import LowerClean from './LowerClean'; import LowerClean from './LowerClean';
import LowerLines from './LowerLines'; import LowerLines from './LowerLines';
const isEqual = require('react-fast-compare');
export default function Lower(props) { const areEqual = (prevProps, nextProps) => {
const { title, ...rest } = props; return (
const [titles, setTitles] = useState(null); isEqual(prevProps.title, nextProps.title) &&
isEqual(prevProps.lower && nextProps.lower)
);
};
const Lower = (props) => {
const { title } = props;
const [titles, setTitles] = useState({
titleNow: '',
titleNext: '',
subtitleNow: '',
subtitleNext: '',
presenterNow: '',
presenterNext: '',
showNow: false,
showNext: false,
});
const [preset, setPreset] = useState(1); const [preset, setPreset] = useState(1);
const [lowerOptions, setLowerOptions] = useState({}); const [lowerOptions, setLowerOptions] = useState({});
@@ -23,21 +40,17 @@ export default function Lower(props) {
title?.subtitleNow !== titles?.subtitleNow || title?.subtitleNow !== titles?.subtitleNow ||
title?.presenterNow !== titles?.presenterNow title?.presenterNow !== titles?.presenterNow
) { ) {
console.log('DEBUG TITLES: SETTING TITLES TO NULL');
setTitles((t) => ({ ...t, showNow: false })); setTitles((t) => ({ ...t, showNow: false }));
const transitionTime = 2000; const transitionTime = 2000;
timeout = setTimeout(() => { timeout = setTimeout(() => {
console.log('DEBUG TITLES: RESUMING');
setTitles(title); setTitles(title);
}, transitionTime); }, transitionTime);
} }
return () => { return () => {
if (timeout != null) { if (timeout != null) {
console.log('DEBUG TITLES: CLEARING');
clearTimeout(timeout); clearTimeout(timeout);
} }
}; };
@@ -109,10 +122,18 @@ export default function Lower(props) {
switch (preset) { switch (preset) {
case 0: case 0:
return <LowerClean {...rest} title={title} options={lowerOptions} />; return (
<LowerClean lower={props.lower} title={titles} options={lowerOptions} />
);
case 1: case 1:
return <LowerLines {...rest} title={titles} options={lowerOptions} />; return (
<LowerLines lower={props.lower} title={titles} options={lowerOptions} />
);
default: default:
return <LowerLines {...rest} title={title} options={lowerOptions} />; return (
<LowerLines lower={props.lower} title={titles} options={lowerOptions} />
);
} }
} };
export default memo(Lower, areEqual);
+1 -1
View File
@@ -10078,7 +10078,7 @@ react-error-overlay@^6.0.9:
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a"
integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==
react-fast-compare@3.2.0: react-fast-compare@3.2.0, react-fast-compare@^3.2.0:
version "3.2.0" version "3.2.0"
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==