`transition-property: scale` names `scale`, while the style that changes is `transform`
Maintainer thường phản hồi trong vòng 5 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 62/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- react-native, typescript
Hướng nghiên cứu
Start with the transition-property case in src/compiler/declarations.ts, then trace how parseMargin, parseTranslate and the other parsers determine written style keys. Run the reproducer test src/__tests__/native/transition-key-written-elsewhere.test.tsx from the linked branch. Done means transitions name the keys produced by the declarations and keep duration, delay and timing function lists aligned.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Before submitting a new issue
- I tested using the latest version of the library, as the bug might be already fixed.
- I tested using a supported version of react native.
- I checked for possible duplicate issues, with possible answers.
Bug summary
A transition names the style key it animates, but the compiler writes some properties under other keys: translate, rotate and scale into transform, and a non-uniform margin into its sides. So transition-property: scale names scale while the style that changes is transform, and Reanimated's transition, which follows the names it is given, animates nothing.
scale: transitionProperty ["scale"], style keys ["transform"]
translate: transitionProperty ["translate"], style keys ["transform"]
margin: transitionProperty ["margin"], style keys ["marginTop","marginBottom","marginLeft","marginRight"]
All three fail. Expected: a transition on each property names the keys it is written to, repeating its duration, delay and timing function for each so the lists stay aligned. addTransitionValue's transition-property case (src/compiler/declarations.ts) maps one name to one key, while the keys a shorthand or translate, rotate and scale write come from their parsers (parseMargin, parseTranslate and the rest).
Library version
main at 2421ea7 (0.0.0-nightly.2421ea7)
Environment info
System:
OS: Windows 11 10.0.26300
CPU: "(32) x64 AMD Ryzen 9 9950X3D 16-Core Processor "
Memory: 155.26 GB / 255.67 GB
Binaries:
Node:
version: 26.12.1
path: C:\Program Files\nodejs\node.EXE
Yarn:
version: 4.9.2
path: C:\Users\<user>\AppData\Roaming\npm\yarn.CMD
npm:
version: 12.2.1
path: C:\Program Files\nodejs\npm.CMD
Watchman: Not Found
SDKs:
Android SDK:
API Levels:
- "33"
- "35"
- "35"
- "35"
- "36"
- "37"
Build Tools:
- 35.0.0
- 36.0.0
- 36.1.0
- 37.0.0
System Images:
- android-26 | Google APIs Intel x86_64 Atom
- android-28 | Google APIs Intel x86_64 Atom
- android-29 | Google APIs Intel x86_64 Atom
- android-30 | Google APIs Intel x86_64 Atom
- android-31 | Google APIs Intel x86_64 Atom
- android-32 | Google APIs Intel x86_64 Atom
- android-33 | Google APIs Intel x86_64 Atom
- android-34 | Google APIs Intel x86_64 Atom
- android-35 | Google APIs Intel x86_64 Atom
- android-36.1 | Google Play Intel x86_64 Atom
- android-36.1 | Pre-Release 16 KB Page Size Google Play Intel x86_64 Atom
- android-37.0 | Google APIs Intel x86_64 Atom
Android NDK: Not Found
Windows SDK: Not Found
IDEs:
Android Studio: AI-262.9437.185.2621.16467767
Visual Studio: Not Found
Languages:
Java:
version: 17.0.20.1
path: C:\Program Files\Microsoft\jdk-17.0.20.101-hotspot\bin\javac.EXE
Ruby: Not Found
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 19.2.3
wanted: 19.2.3
react-native:
installed: 0.86.3
wanted: 0.86.3
react-native-windows: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: Not found
newArchEnabled: Not found
iOS:
hermesEnabled: Not found
newArchEnabled: Not found
Steps to reproduce
- Clone the reproducer branch, which is
mainat 2421ea7 with one file added,src/__tests__/native/transition-key-written-elsewhere.test.tsx, and install:git clone --branch repro/532-transition-names-a-key-the-compiler-writes-elsewhere https://github.com/YevheniiKotyrlo/react-native-css cd react-native-css yarn install - Run
yarn jest src/__tests__/native/transition-key-written-elsewhere.test.tsx.
src/__tests__/native/transition-key-written-elsewhere.test.tsx:
import { StyleSheet } from "react-native";
import { render, screen } from "@testing-library/react-native";
import { View } from "react-native-css/components/View";
import { registerCSS, testID } from "react-native-css/jest";
jest.mock("../../native/reanimated", () => ({
animatedComponentFamily: (component: unknown) => component,
}));
test.each([
["scale", "scale: 2"],
["translate", "translate: 10px"],
["margin", "margin: 1px 2px"],
])("a transition on %s names a key the style holds", (property, declaration) => {
registerCSS(`.a { transition-property: ${property}; transition-duration: 1s; ${declaration}; }`);
render(<View testID={testID} className="a" />);
const style = StyleSheet.flatten(screen.getByTestId(testID).props.style) as Record<string, unknown>;
const keys = Object.keys(style).filter((key) => !key.startsWith("transition"));
console.log(`${property}: transitionProperty ${JSON.stringify(style.transitionProperty)}, style keys ${JSON.stringify(keys)}`);
expect(keys).toEqual(expect.arrayContaining(style.transitionProperty as string[]));
});
Expected: transition-property: scale animates the style that changes, transform, and the same for the other properties the compiler writes under other keys.
Actual: the transition names scale, a key the style never changes, so nothing animates.
The run's output on main at 2421ea7, Windows 11, Node 26.12.1
console.log
scale: transitionProperty ["scale"], style keys ["transform"]
at log (src/__tests__/native/transition-key-written-elsewhere.test.tsx:20:11)
console.log
translate: transitionProperty ["translate"], style keys ["transform"]
at log (src/__tests__/native/transition-key-written-elsewhere.test.tsx:20:11)
console.log
margin: transitionProperty ["margin"], style keys ["marginTop","marginBottom","marginLeft","marginRight"]
at log (src/__tests__/native/transition-key-written-elsewhere.test.tsx:20:11)
FAIL src/__tests__/native/transition-key-written-elsewhere.test.tsx
× a transition on scale names a key the style holds (29 ms)
× a transition on translate names a key the style holds (5 ms)
× a transition on margin names a key the style holds (2 ms)
● a transition on scale names a key the style holds
expect(received).toEqual(expected) // deep equality
Expected: ArrayContaining ["scale"]
Received: ["transform"]
19 | const keys = Object.keys(style).filter((key) => !key.startsWith("transition"));
20 | console.log(`${property}: transitionProperty ${JSON.stringify(style.transitionProperty)}, style keys ${JSON.stringify(keys)}`);
> 21 | expect(keys).toEqual(expect.arrayContaining(style.transitionProperty as string[]));
| ^
22 | });
23 |
at toEqual (src/__tests__/native/transition-key-written-elsewhere.test.tsx:21:16)
● a transition on translate names a key the style holds
expect(received).toEqual(expected) // deep equality
Expected: ArrayContaining ["translate"]
Received: ["transform"]
19 | const keys = Object.keys(style).filter((key) => !key.startsWith("transition"));
20 | console.log(`${property}: transitionProperty ${JSON.stringify(style.transitionProperty)}, style keys ${JSON.stringify(keys)}`);
> 21 | expect(keys).toEqual(expect.arrayContaining(style.transitionProperty as string[]));
| ^
22 | });
23 |
at toEqual (src/__tests__/native/transition-key-written-elsewhere.test.tsx:21:16)
● a transition on margin names a key the style holds
expect(received).toEqual(expected) // deep equality
Expected: ArrayContaining ["margin"]
Received: ["marginTop", "marginBottom", "marginLeft", "marginRight"]
19 | const keys = Object.keys(style).filter((key) => !key.startsWith("transition"));
20 | console.log(`${property}: transitionProperty ${JSON.stringify(style.transitionProperty)}, style keys ${JSON.stringify(keys)}`);
> 21 | expect(keys).toEqual(expect.arrayContaining(style.transitionProperty as string[]));
| ^
22 | });
23 |
at toEqual (src/__tests__/native/transition-key-written-elsewhere.test.tsx:21:16)
Test Suites: 1 failed, 1 total
Tests: 3 failed, 3 total
Snapshots: 0 total
Time: 1.154 s, estimated 2 s
Ran all test suites matching /src\\__tests__\\native\\transition-key-written-elsewhere.test.tsx/i.
Reproducible example repository
- Ngôn ngữ chính
- TypeScript
- Star
- 166
- Fork
- 45
- Merge trung bình
- 10 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 4
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của nativewind/react-native-css
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
nativewind/react-native-css#554 ·
Maintainer thường phản hồi trong vòng 5 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
nativewind/react-native-css#549 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
nativewind/react-native-css#548 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
nativewind/react-native-css#545 ·
Maintainer thường phản hồi trong vòng 5 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
nativewind/react-native-css#544 ·
Maintainer thường phản hồi trong vòng 5 ngày
Tất cả issue của nativewind/react-native-css
Issue tương tự
-
needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
microsoft/playwright#43875 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
feature
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
calagopus/panel#285 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 Dưới một giờ Mức phù hợp với người mới 88/100
adobe/react-spectrum#10909 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Keybind conflict with "Tileset"Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
Run the dependency drift checkCó thể đã có người làm @spaceninja đã nhận hôm nay. Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 72/100
cloudfour/lighthouse-parade#449 ·
Maintainer thường phản hồi trong vòng 1 ngày