2015-01-08 22 views
5

Tôi đã có một thành phần cần đọc một biến trạng thái thuộc về con của nó tại một số điểm.
Biến trạng thái cụ thể này có nên được chuyển sang phụ huynh và được thay đổi qua gọi lại không?Phản ứng: đang truy cập trạng thái của trẻ em chống mẫu?

Như tôi đã nhìn thấy nó, và một số trong số này là có khả năng sai, đây là những ưu và nhược điểm của việc di chuyển nhà nước để phụ huynh:

Pro: Điều này dường như tuân thủ hơn để các luồng dữ liệu theo một hướng thần chú phản ứng.

Con: Các trẻ khác của cha mẹ sẽ được hiển thị lại về thay đổi trạng thái (không phải trong DOM thực, nhưng nó vẫn có tác động hiệu suất).

Phương pháp hay nhất ở đây là gì?

+0

Nó sẽ được chuyển trở lại kể từ khi "sao lưu" là nơi cần thiết. Tại sao biến đó ngay cả trong thành phần con nếu thành phần cha cần nó? –

Trả lời

10

Thực hành tốt nhất cho các luồng dữ liệu là:

  • Từ mẹ sang con: qua đạo cụ
  • Từ đứa trẻ để cha mẹ: qua xử lý
  • Từ thành phần không liên quan đến nhau: qua xe buýt nhắn

ví dụ

<Child onEvent={this.handleEvent}> 

Phụ huynh có:

handleEvent: function(dataFromChild) { 

} 
+0

Có mùi để lưu trữ dữ liệu trong phụ huynh, nhưng không phải trong trạng thái 'của nó', và chỉ trong một biến lớp, nếu tôi biết không cần phải kiểm tra lại? –

+1

@eye_mew: Tôi muốn nói là vậy. Bạn có thể lưu trữ các công cụ như các khoảng thời gian ví dụ, nhưng bất kỳ thứ gì 'render' phụ thuộc vào nên đi vào' trạng thái'. Nếu không React sẽ không thể tìm ra một cái gì đó thay đổi, và các phương thức vòng đời như 'componentDidUpdate' cũng sẽ vô dụng (vì sẽ không có bất kỳ dữ liệu nào trong' prevState', ví dụ). –

+0

Xem thêm: [Suy nghĩ trong phản ứng] (http://facebook.github.io/react/blog/2013/11/05/thinking-in-react.html) –

2

Như Petka ghi chú khác, nhà nước nên sống trên đỉnh.
Thinking in React giải thích rõ điều này.

Các trẻ khác của cha mẹ sẽ được hiển thị lại về thay đổi trạng thái (không phải trong DOM thực, nhưng nó vẫn có tác động hiệu suất).

Bạn không thể nhận thấy điều này trừ khi bạn làm điều này ở 60 khung hình/giây.
Và nếu bạn làm thế, React đã bao phủ bạn với tùy chọn shouldComponentUpdate (và PureRenderMixin).

Các vấn đề liên quan