`styled()` crashes with `Maximum call stack size exceeded` when wrapping `react-native-svg` primitives
维护者通常 3 天内回复
@marklawlor 已经在做这个了。
开始于 2026年7月15日。
评估
这个 Issue 还没有评估数据。
描述
Describe the bug
In [email protected], the documented v5 third-party-component recipe for react-native-svg throws on first render:
RangeError: Maximum call stack size exceeded (native stack depth)
The same crash also fires when calling useUnstableNativeVariable() from a component rendered inside an SVG tree — so the bug appears to live in the shared observable/effect layer that both APIs route through (useNativeCss → varResolver → reactivity graph), not in styled() itself.
Plain <Svg color={someStaticHex} /> with the color resolved outside of any NativeWind runtime hook renders correctly. Only the NativeWind runtime path crashes.
Versions:
nativewind:5.0.0-preview.4react-native-css:3.0.7react-native-svg:15.15.4react-native:0.85.3react:19.2.3expo:56.0.11(SDK 56)tailwindcss:4.2.0(Tailwind v4,@theme {}block)- Platform: iOS simulator, Hermes
Reproduction
npx rn-new@latest --nativewind then drop in:
import { styled } from 'nativewind';
import Svg, { Path } from 'react-native-svg';
const StyledSvg = styled(Svg);
const StyledPath = styled(Path);
export default function App() {
return (
<StyledSvg width={24} height={24} viewBox="0 0 24 24" className="text-red-500">
<StyledPath d="M2 12h20" stroke="currentColor" strokeWidth={2} />
</StyledSvg>
);
}
The documented nativeStyleMapping recipe reproduces the same crash:
const StyledSvg = styled(Svg, {
className: { target: 'style', nativeStyleMapping: { color: 'color' } },
});
Expected behavior
styled(Svg, { className: { target: 'style', nativeStyleMapping: { color: 'color' } } }) should resolve text-… classes to a color value and lift it onto the <Svg color={…}> prop, so stroke="currentColor" on descendants follows the Tailwind text color. This is the v4 cssInterop recipe that the v5 third-party-components guide still points to.
Additional context
Two suspect spots in [email protected] that fit the symptom (not confirmed by runtime instrumentation):
useNativeCssrunssetStateduring render iftestGuardsflips.react-native-svg'sSvg/Shapeclass components rebuild prop derivations on every render (extractedProps,SvgTouchableMixin,setNativeProps), so an identity-based guard may flip on every iteration and recurse synchronously.varResolver'svariableHistoryonly blocks repeating the same variable name — it doesn't catch cycles across different names. Tailwind v4 OKLCH palette colors compile to nestedvar()chains, which may be enough to trigger that.
Workaround in use: resolve the color from className ourselves via useColorScheme() + a static token map mirrored from our @theme {} block, then pass it as <Svg color={…} />. Inner Path/Circle stay as plain react-native-svg primitives with stroke="currentColor". Works, but duplicates values from CSS and can't read live runtime variables.
What I tried that did not help:
- Every
nativeStyleMappingshape onstyled(Svg, …). - Wrapping only the outer
<Svg>and leaving inner primitives untouched. - Calling
useUnstableNativeVariable('color-foreground-tertiary')before any SVG primitive renders — still crashes.
Related: #242 — [V5] - styled doesn't work as it worked in V4 — same symptom shape, marked Done in roadmap but not yet in a published preview.
- 主要语言
- TypeScript
- 星标
- 166
- 派生
- 45
- 平均合并
- 13 天 14 小时
- 30 天内合并 PR
- 1
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
nativewind/react-native-css 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
nativewind/react-native-css#545 ·
维护者通常 3 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
nativewind/react-native-css#544 ·
维护者通常 3 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
nativewind/react-native-css#543 ·
维护者通常 3 天内回复
-
难度 2/5 1-3 小时 新手友好度 84/100
nativewind/react-native-css#540 ·
维护者通常 3 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
nativewind/react-native-css#538 ·
维护者通常 3 天内回复
查看 nativewind/react-native-css 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
area:web p3
难度 2/5 1-3 小时 新手友好度 72/100
Lets-Parley/Parley#912 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
wealthfolio/wealthfolio#2376 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 82/100
be-BOP-io-SA/be-BOP#2817 ·
维护者通常 5 天内回复
-
documentation good first issue
难度 1/5 1-3 小时 新手友好度 84/100
sno-ai/sno-station#149 · 1 条评论 ·
维护者通常 1 天内回复