From bdf1b977d12b2e612fd38233943585b7c495526a Mon Sep 17 00:00:00 2001 From: David Gilbertson Date: Fri, 20 Mar 2020 13:40:10 +1100 Subject: [PATCH] 100 Remember subscriptions from previous render --- src/collect.tsx | 2 -- tests/integration/TaskListTest/Task.tsx | 4 ++-- tests/integration/TaskListTest/TaskList.test.tsx | 16 +++++++++++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/collect.tsx b/src/collect.tsx index e2ea842..9f555ba 100644 --- a/src/collect.tsx +++ b/src/collect.tsx @@ -14,8 +14,6 @@ const componentStack: CollectorComponent[] = []; const startRecordingGetsForComponent = (component: CollectorComponent) => { if (!state.isInBrowser) return; - removeListenersForComponent(component); - debug(() => { console.groupCollapsed(`RENDER: <${component._name}>`); }); diff --git a/tests/integration/TaskListTest/Task.tsx b/tests/integration/TaskListTest/Task.tsx index c79d718..7eab2bc 100644 --- a/tests/integration/TaskListTest/Task.tsx +++ b/tests/integration/TaskListTest/Task.tsx @@ -6,7 +6,7 @@ type Props = { task: TaskType; }; -const Task = ({ task }: Props) => ( +const Task = React.memo(({ task }: Props) => (
-); +)); export default Task; diff --git a/tests/integration/TaskListTest/TaskList.test.tsx b/tests/integration/TaskListTest/TaskList.test.tsx index 5ed4591..1ba470f 100644 --- a/tests/integration/TaskListTest/TaskList.test.tsx +++ b/tests/integration/TaskListTest/TaskList.test.tsx @@ -18,13 +18,23 @@ it('TaskList', async () => { await findByText('Task one'); // it should mark a task as done in a child component - const checkbox = getByLabelText('Task one') as HTMLInputElement; + const taskOneCheckbox = getByLabelText('Task one') as HTMLInputElement; - expect(checkbox.checked).toBe(false); + expect(taskOneCheckbox.checked).toBe(false); getByLabelText('Task one').click(); - expect(checkbox.checked).toBe(true); + expect(taskOneCheckbox.checked).toBe(true); + + // the component should still be listening to other tasks. See bug: + // https://github.com/davidgilbertson/react-recollect/issues/100 + const taskTwoCheckbox = getByLabelText('Task two') as HTMLInputElement; + + expect(taskTwoCheckbox.checked).toBe(false); + + getByLabelText('Task two').click(); + + expect(taskTwoCheckbox.checked).toBe(true); // it should delete a task from a child component getByText('Delete Task one').click();