Helpex - Trao đổi & giúp đỡ Đăng nhập
5

Sau khi chiếm lĩnh bản thân một chút với việc học React, tôi vẫn coi nhiều khái niệm là khó tiếp thu.

Trong số khác: Tính bất biến của đạo cụ.

Nếu tôi hiểu đúng thì các thành phần, ít nhiều, tương đương với các đối tượng trong lập trình hướng đối tượng.

Trong lập trình hướng đối tượng, bạn truyền dữ liệu vào các đối tượng thông qua tham số phương thức. Trong React, bạn có các đạo cụ để truyền dữ liệu vào các thành phần.

Nếu bạn truyền một tham số cho một phương thức Java thì bạn có thể thay đổi những dữ liệu này trong phần thân phương thức. Không vấn đề gì.

Trong React không thể thực hiện được vì đạo cụ là bất biến.

Tất cả các tài liệu và nội dung mà tôi đã thấy đều đề cập đến tính bất biến này như một khái niệm quan trọng. Nhưng cho đến nay không ai thực sự cho tôi biết lý do tại sao .

Ai đó có thể vui lòng cho tôi biết: Lợi ích tuyệt vời của việc có các đạo cụ bất biến là gì không?

Hoặc tương ứng: Điều gì sẽ là bất lợi lớn của việc không có tính bất biến? Điều gì có thể xảy ra nếu các đạo cụ có thể thay đổi được?

Thích là một ví dụ điển hình. Sau đó, cơ hội lớn hơn mà tôi có thể nhận được nó.

5 hữu ích 1 bình luận 1.2k xem chia sẻ
8

Tôi sẽ nói ngắn gọn vì tôi không phải là chuyên gia về lập trình chức năng. Tôi chắc chắn rằng một người nào đó có nhiều kinh nghiệm hơn sẽ tham gia.

Bắt đầu bằng cách nghĩ về các thành phần của bạn, không phải về Đối tượng mà thay vào đó, dưới dạng các hàm (như trong thuật ngữ toán học). Thành phần của bạn là một chức năng của các thuộc tính của nó . Đặc biệt hơn đó là chức năng kết xuất . Nó lấy props và trả về HTML (thực ra nó trả về cây dom ảo, nhưng điều đó không liên quan)

Các hàm trong toán học là thuần túy . Bạn cung cấp cho họ một đầu vào, họ cung cấp cho bạn một đầu ra. Họ không có tác dụng phụhọ không sử dụng bất kỳ đầu vào nào khác . Và điều đó mang lại cho bạn một số lợi ích tuyệt vời:

  1. Các chức năng thuần túy có thể dự đoán được . Mọi đầu vào sẽ có cùng một đầu ra. Có thể dự đoán được, có nghĩa là chúng có thể được tối ưu hóa và sử dụng những thứ như ghi nhớ để lưu vào bộ nhớ cache kết quả của chúng hoặc không phải hiển thị các phần của giao diện người dùng của bạn nếu đạo cụ của chúng không thay đổi vì bạn biết chúng sẽ không thay đổi .
  2. Chỉ phụ thuộc vào đầu vào mà bạn được cung cấp sẽ giúp ích rất nhiều khi cố gắng gỡ lỗi khi có điều gì đó không ổn vì bạn không cần phải lo lắng về trạng thái toàn cục. Bạn chỉ phải lo lắng về các thuộc tính được chuyển cho bạn .
  3. Bạn không phải lo lắng về thứ tự mà hàm thuần túy được thực thi, vì chúng được đảm bảo không có tác dụng phụ .
  4. Nó cho phép nhà phát triển trải nghiệm thực sự thú vị như gỡ lỗi du hành thời giancác thành phần có thể thay thế nóng .

Đó chỉ là một số lợi ích, một nhà phát triển trung bình như tôi có thể thấy. Tôi chắc rằng ai đó có kinh nghiệm lập trình chức năng thực sự có thể có thêm nhiều thứ nữa. Hy vọng nó giúp

8 hữu ích 4 bình luận chia sẻ
3

(Sau khi đọc phần sau Tại sao tôi không thể cập nhật đạo cụ trong react.js? )

Sẽ là một sự tách biệt tốt giữa các trách nhiệm nếu bạn chỉ có thể thay đổi trạng thái của chính mình và bạn truyền đạt trạng thái của mình một cách gián tiếp bằng các đạo cụ. Điều này dẫn đến sự gắn kết cao hơn.

Có thể tạo mã ít dễ hiểu hơn nếu bạn được phép trong thành phần A thay đổi trạng thái của thành phần B bằng cách thay đổi trực tiếp các đạo cụ.

Tôi hy vọng điều này giải đáp lý do tại sao.

3 hữu ích 0 bình luận chia sẻ
3

Lợi ích lớn nhất của tính bất biến là bất cứ điều gì thành phần của bạn hiển thị đều có thể dự đoán được. Chế độ xem kết quả chỉ là bản đồ của một số đạo cụ. Hãy tưởng tượng nếu trong một hệ thống phân cấp, mỗi thành phần có thể thay đổi các đạo cụ được chuyển xung quanh. Sẽ rất khó để theo dõi ai là người đã thực hiện sửa đổi.

Đây là lý do tại sao trong lập trình chức năng, các hàm thuần túy và kiểu bất biến là tiêu chuẩn. Rất dễ để suy luận - một hàm thuần túy là một ánh xạ thuần túy của đầu vào và đầu ra và chỉ có thế.

3 hữu ích 3 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript reactjs functional-programming , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading