Field label bound to a createModel accessor crashes: scheduleExploreIfVisible is not a function
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 76/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ệ
- typescript
- Lĩnh vực
- frontend
Hướng nghiên cứu
Bắt đầu tại Field.init, nơi issue chỉ ra các bước kiểm tra nhãn và cách xử lý isAccessorChain được đề xuất; kiểm tra các helper accessor và selector để xác nhận hành vi của chúng. Tái hiện lỗi bằng ví dụ TextField sử dụng createModel và so sánh với dạng bind hoạt động. Hoàn tất khi chuỗi accessor được coi là văn bản nhãn và trường không còn ném lỗi trong lần khám phá đầu tiên.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
<TextField label={m.$page.labels.key} /> with m = createModel<...>() throws TypeError: ins.scheduleExploreIfVisible is not a function from Widget.explore when the field is first explored. label={bind(m.$page.labels.key)} works.
TypeError: ins.scheduleExploreIfVisible is not a function
at TextField.explore (Widget)
at TextField.explore (PureContainer)
at TextField.explore (Field)
at Instance.explore
Cause: Field.init tests this.label.isComponentType before isSelector(this.label):
if ((this.label as any).isComponentType) labelConfig = this.label;
else if (isSelector(this.label)) labelConfig.text = this.label;
else Object.assign(labelConfig, this.label);
An accessor chain is a Proxy whose every property is a truthy accessor, so it is taken for a component and used as the label widget. isSelector would not catch it either, since config.type is truthy on the proxy.
Suggested fix: in Field.init, check isAccessorChain(this.label) first and set labelConfig.text = this.label. Consider making isSelector return true for accessor chains, so other props typed StringProp | Config behave the same.
Seen on cx 26.7.0.
- Ngôn ngữ chính
- TypeScript
- Star
- 492
- Fork
- 72
- Merge trung bình
- 21 phút
- Pull request đã merge (30 ngày)
- 4
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
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 codaxy/cxjs
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
-
feature request
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
Issue tương tự
-
documentation good first issue roadmap
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
resend/react-email#3876 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
siyuan-note/siyuan#21324 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
dmno-dev/varlock#1279 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
himynameisdave/bsky-profanity-counter#59 ·
Maintainer thường phản hồi trong vòng 1 ngày