cảnh báo `thành phầnWillMount` mặc dù không được sử dụng rõ ràng


9

Trong mã của tôi, tôi không có bất kỳ cách sử dụng rõ ràng nàocomponentWillMount , nhưng tôi vẫn thấy một vài cảnh báo khi chạy webpack.

Reac-dom.development.js: 12386 Cảnh báo: thành phầnWillMount đã được đổi tên và không được khuyến khích sử dụng. Xem https: /fb.me/react-unsafe-component-lifec đua để biết chi tiết.

  • Di chuyển mã với các tác dụng phụ sang thành phầnDidMount và đặt trạng thái ban đầu trong hàm tạo.
  • Đổi tên thành phầnWillMount thành UNSAFE_componentWillMount để chặn cảnh báo này ở chế độ không nghiêm ngặt. Trong React 17.x, chỉ tên UNSAFE_ sẽ hoạt động. Để đổi tên tất cả các vòng đời không dùng sang tên mới của chúng, bạn có thể chạy npx react-codemod rename-unsafe-lifecyclestrong thư mục nguồn dự án của mình.

Vui lòng cập nhật các thành phần sau: foo, bar

Tôi đã chạy đề xuất npx react-codemod rename-unsafe-lifecycles, nhưng cảnh báo không biến mất, mà chỉ thay đổi từ ngữ của nó thành

Reac-dom.development.js: 12386 Cảnh báo: thành phầnWillMount đã được đổi tên và không được khuyến khích sử dụng. [...]

Ở đây, foobarcả hai thành phần tùy chỉnh mà nhóm chúng tôi đã viết và một số thành phần của các thư viện bên ngoài. Một tìm kiếm đầy đủ về giải pháp Visual Studio cho componentWillMountdoese không cho tôi bất kỳ kết quả nào. Ai đó có thể vui lòng giải thích cho tôi những gì tôi có thể làm sai?

Tôi đọc một câu hỏi khác một bình luận nêu

Tôi không có bất kỳ vị trí rõ ràng nào với componentWillMount, nhưng tôi có [...] một dòng mã sau hàm tạo với state={ tabindex:0 }Làm thế nào để tôi "di chuyển" nó vào hàm tạo?

Câu trả lời là viết constructor(props) {super(props); this.state = { tabindex:0 }}. Ai đó có thể giải thích những gì đang xảy ra ở đây, xin vui lòng? Loại mẫu nào tôi phải tìm trong mã của chúng tôi?

Biết thêm chi tiết

    printWarning    @   react-dom.development.js:12386
lowPriorityWarningWithoutStack  @   react-dom.development.js:12407
./node_modules/react-dom/cjs/react-dom.development.js.ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings   @   react-dom.development.js:12577
flushRenderPhaseStrictModeWarningsInDEV @   react-dom.development.js:25641
commitRootImpl  @   react-dom.development.js:24871
unstable_runWithPriority    @   scheduler.development.js:815
runWithPriority$2   @   react-dom.development.js:12188
commitRoot  @   react-dom.development.js:24865
finishSyncRender    @   react-dom.development.js:24251
performSyncWorkOnRoot   @   react-dom.development.js:24223
scheduleUpdateOnFiber   @   react-dom.development.js:23590
scheduleRootUpdate  @   react-dom.development.js:26945
updateContainerAtExpirationTime @   react-dom.development.js:26973
updateContainer @   react-dom.development.js:27075
(anonymous) @   react-dom.development.js:27663
unbatchedUpdates    @   react-dom.development.js:24375
legacyRenderSubtreeIntoContainer    @   react-dom.development.js:27662
render  @   react-dom.development.js:27756
./src/index.tsx @   index.tsx:52
__webpack_require__ @   bootstrap:19
0   @   bundle.js:152632
__webpack_require__ @   bootstrap:19
(anonymous) @   bootstrap:83
(anonymous) @   bootstrap:83

Liên quan


1
có lẽ là một lib cũ. dấu vết ngăn xếp nói lên điều gì?
Joe Lloyd

Vâng, tôi đang sử dụng antd trong phiên bản 2.x và tôi không thể thay đổi điều đó do vấn đề kiến ​​trúc. @JoeLloyd Xem theo dõi ngăn xếp trong chỉnh sửa của tôi.
B - rian

Như Joe đã nói ở trên, nó gần như chắc chắn antdsử dụng cWM. Tôi tò mò về những vấn đề kiến ​​trúc bạn gặp phải bằng cách cập nhật antd? Nó dường như là một vấn đề mở trên github liên quan đến các phương pháp vòng đời lỗi thời github.com/ant-design/ant-design/issues/9792
DJ2

@ DJ2: Đây là kiến ​​trúc nội bộ của chúng tôi không hoạt động với Antd3.
B - rian

Câu trả lời:


11

Bạn đang nhận được cảnh báo này vì componentWillMountkhông được dùng trong các phiên bản React mới hơn. Nếu bạn không sử dụng componentWillMountbất cứ nơi nào thì một trong những thư viện của bạn và nó cần được cập nhật.

Nếu nó làm bạn cảm thấy tốt hơn, bản dựng sản xuất của bạn sẽ không hiển thị các cảnh báo này trong bảng điều khiển.

Nếu bạn không thể cập nhật thư viện vì bất kỳ lý do gì, bạn có thể thử khắc phục các lỗi này trong bảng điều khiển bằng cách đặt một cái gì đó như console.warn = () => {}Ở đầu Appthành phần của bạn nhưng tôi không khuyên bạn nên sử dụng console.warnsau này trong đó mã. Tốt nhất chỉ chấp nhận chúng là một sự phiền toái cho đến khi bạn có thể cập nhật thư viện của mình.


1
Phần về xây dựng sản xuất là hữu ích!
B - rian

Đối với những gì nó có giá trị, nếu tôi tải chính trang này khi bảng điều khiển của tôi mở, tôi thấy các cảnh báo về thành phần kết nối. Tôi tưởng tượng điều này có thể không còn đúng nữa sau khi SO thực hiện một số cập nhật ở đâu đó.
William Jockusch

1
Trong trường hợp của tôi, emotionthành phần theo kiểu đang gây ra cảnh báo này. Tôi hy vọng họ sẽ cập nhật sớm.
Uddesh_jain

Cảm ơn. Nhưng tôi sẽ thấy một số câu trả lời phức tạp hơn, mô tả một thuật toán tìm ra thủ phạm. Như đã đề cập trong câu hỏi, đầu ra của cảnh báo không hữu ích lắm.
Onkeltem

@Onkeltem một thuật toán để tìm thư viện nào đang sử dụng chúng? Tôi chắc chắn làm thế nào điều đó sẽ được thực hiện trừ khi bạn có quyền truy cập vào tất cả các mã nguồn của thư viện bên ngoài và có thể thu thập dữ liệu tất cả chúng để tìm các phiên bản của componentWillMount. Theo đầu ra của OP, vấn đề có thể là do bootstrap (xem phần cuối của chi tiết khác).
Matt Croak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.