diff --git a/.npmrc b/.npmrc index d272289..1df2a6d 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,2 @@ -registry=http://registry.npmjs.org/ +registry=https://registry.npmjs.org/ package-lock=false diff --git a/src/__tests__/rerender.js b/src/__tests__/rerender.js index a8e321e..b31ae6c 100644 --- a/src/__tests__/rerender.js +++ b/src/__tests__/rerender.js @@ -1,5 +1,6 @@ import '@testing-library/jest-dom/extend-expect' import { h } from 'preact' +import { useState, useEffect } from 'preact/hooks' import { render } from '..' test('rerender will re-render the element', () => { @@ -12,6 +13,23 @@ test('rerender will re-render the element', () => { expect(container.firstChild).toHaveTextContent('hey') }) +test('rerender will flush pending hooks effects', async () => { + const Component = () => { + const [value, setValue] = useState(0) + useEffect(() => { + const timeoutId = setTimeout(() => setValue(1), 0) + return () => clearTimeout(timeoutId) + }) + + return value + } + + const { rerender, findByText } = render() + rerender() + + await findByText('1') +}) + test('hydrate will not update props until next render', () => { const initialInputElement = document.createElement('input') const container = document.createElement('div') diff --git a/src/pure.js b/src/pure.js index 56d7d79..c5d809e 100644 --- a/src/pure.js +++ b/src/pure.js @@ -69,7 +69,7 @@ function render ( : console.log(prettyDOM(el, maxLength, options)), unmount: () => preactRender(null, container), rerender: (rerenderUi) => { - setupRerender()() + act(() => {}) render(wrapUiIfNeeded(rerenderUi), { container, baseElement }) // Intentionally do not return anything to avoid unnecessarily complicating the API. // folks can use all the same utilities we return in the first place that are bound to