Tôi đang viết lại một ứng dụng nhỏ để thử và hiểu rõ hơn React. Tôi đang cố gắng xác định phương pháp "chính xác"/hiệu quả nhất để chia sẻ dữ liệu "singleton" - ví dụ: người dùng đã được xác thực chính xác khi đăng nhập.Chia sẻ dữ liệu toàn cầu/singleton trong ứng dụng phản ứng
Ngay bây giờ phụ huynh "ứng dụng" thành phần có một tài sản user
trong trạng thái của nó, mà tôi vượt qua các thành phần con như một chỗ dựa:
<Toolbar user={this.state.user} />
<RouteHandler user={this.state.user}/>
(Tôi đang sử dụng phản ứng-router). Điều này làm việc, và trong trường hợp chỉ đọc như thế này, không phải là khủng khiếp. Tuy nhiên, thành phần mẫu đăng nhập thực tế của tôi (đó là một con đường, và sẽ là bên RouteHandler
), cần một số cách để "thiết lập" các dữ liệu người dùng mới, vì vậy tôi cũng cần phải vượt qua trong một số callback:
<RouteHandler onAuthenticated={this.setUser} user={this.state.user}/>
Không một vấn đề lớn, ngoại trừ thực tế là bây giờ phương pháp này có sẵn cho mọi "tuyến đường" được xử lý bởi RouteHandler
.
Tôi đã đọc và dường như giải pháp thay thế duy nhất là hệ thống kiểu EventEmitter
hoặc Dispatch
.
Có cách nào tốt hơn tôi bị thiếu không? Là một hệ thống phát hiện/điều phối sự kiện có giá trị sử dụng khi thực sự chỉ có một hoặc hai sử dụng trong một ứng dụng nhỏ này?
một bạn đang sử dụng thông lượng? Trong một ứng dụng Flux, trạng thái như thế này sẽ đi vào một cửa hàng (ví dụ: "SessionStore"). –
bạn có thể viết một mixin để xử lý 'localStorage' và lưu người dùng dưới dạng một mục. – marcel