Field label bound to a createModel accessor crashes: scheduleExploreIfVisible is not a function

Đang mở Phù hợp với người mới
#1,345 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

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

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của codaxy/cxjs

Tất cả issue của codaxy/cxjs

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.