From fdf4a5d10ab927fa6c484355ea17b76b87c834d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E8=89=B3=E5=85=B5?= Date: Mon, 28 Sep 2026 10:38:58 +0800 Subject: [PATCH] fix: preserve zero-valued children --- package.json | 2 +- src/MutateObserver.tsx | 3 ++- tests/renderability.test.tsx | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 tests/renderability.test.tsx diff --git a/package.json b/package.json index 99e94b7..896d565 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "watch": "father dev" }, "dependencies": { - "@rc-component/util": "^1.11.1" + "@rc-component/util": "^1.13.0" }, "devDependencies": { "@eslint/js": "^10.0.1", diff --git a/src/MutateObserver.tsx b/src/MutateObserver.tsx index eef3664..a568e99 100644 --- a/src/MutateObserver.tsx +++ b/src/MutateObserver.tsx @@ -1,5 +1,6 @@ import { getDOM, + isReactRenderable, getNodeRef, supportNodeRef, useComposeRef, @@ -34,7 +35,7 @@ const MutateObserver: React.FC = props => { }, [canRef]); // =========================== Render =========================== - if (!children) { + if (!isReactRenderable(children)) { if (process.env.NODE_ENV !== 'production') { console.error('MutationObserver need children props'); } diff --git a/tests/renderability.test.tsx b/tests/renderability.test.tsx new file mode 100644 index 0000000..ef20bac --- /dev/null +++ b/tests/renderability.test.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import MutateObserver from '../src'; + +it('preserves a zero child without reporting a missing child', () => { + const error = jest.spyOn(console, 'error').mockImplementation(() => {}); + try { + const { container } = render({0}); + expect(container.textContent).toBe('0'); + expect(error).not.toHaveBeenCalled(); + } finally { + error.mockRestore(); + } +});