Tôi đang cố gắng suy nghĩ về những gì mọi người sẽ xem xét các phương pháp hay nhất về cách mọi người tổ chức cuộc gọi mạng trong ứng dụng phản ứng + redux của họ. Tôi thường để các thành phần của tôi thực hiện các cuộc gọi, nhận dữ liệu và sau đó chuyển nó thành một hành động sẽ bị giảm. Đây có phải là thực hành tốt nhất hay tốt hơn là tách riêng mạng ra khỏi các thành phần của tôi và đặt logic đó ở đâu đó khác trong ứng dụng, có thể trong bộ giảm tốc?Nơi để thực hiện cuộc gọi mạng trong ứng dụng phản ứng + redux
Trả lời
Nơi tốt nhất để thực hiện cuộc gọi mạng là người tạo hành động của bạn. Tuy nhiên, bạn sẽ cần một số phần mềm trung gian để làm việc đó tốt nhất. Hãy xem điều này promise-middleware (trên thực tế, tôi muốn đề nghị kiểm tra toàn bộ hướng dẫn đó). Nếu bạn sử dụng phần mềm trung gian đó, bạn có thể có người tạo hành động trả lời lời hứa và cũng có ba loại hành động - một cho yêu cầu, một để xử lý câu trả lời thành công và một để xử lý các yêu cầu không thành công. Sau đó, bạn chỉ cần lắng nghe 3 hành động đó trong bộ giảm tốc của bạn.
Vì vậy, với middleware đó, bạn có thể có một tác giả hành động như thế này:
function networkCall() {
return {
types: ['MAKE_REQUEST', 'REQUEST_SUCCESS', 'REQUEST_FAILURE'],
promise:() => {
return new Promise((resolve, reject) => {
$.ajax({
url: 'example.com/api'
type: 'GET'
});
})
}
}
}
Rõ ràng bạn được tự do để xây dựng middleware lời hứa của mình, nhưng điều đó nên đặt bạn đi đúng hướng.
Tôi thực hiện theo mẫu của các hành động trong redux tutorials for Async Actions. Nó có ý nghĩa nhất với tôi để giữ cho mọi thứ không đồng bộ trong các hành động - tránh xa cả các thành phần và cửa hàng/bộ giảm tốc.
Tôi cũng sử dụng Redux Crud để chuẩn hóa các hành động liên quan đến tác vụ mạng.
Bạn có thể sử dụng một phần mềm trung gian API, hoặc là redux-api-middleware
hoặc một cái gì đó của riêng bạn (nó không phải là rất khó để write one).
Sau đó, ví dụ, người sáng tạo hành động của bạn có thể trở lại hoạt động như
{type: 'API_GET', url: '/api/userList', nextType: 'USER_LIST'}
... mà sau này sẽ được xử lý bởi một middleware sẽ gửi yêu cầu thực tế và sau đó cử một hành động mới như:
{type: 'USER_LIST_FETCHED', status: 200, payload: [{id: 1, ...}, ...]}
{type: 'USER_LIST_FAILED', status: 404, payload: {message: '...'}}
Tôi nghĩ rằng đây là một việc đã được thực hiện ngay trong Angular. Bạn có tất cả các cuộc gọi mạng được đặt gọn gàng trong số services
của mình. Điều này có thể dễ dàng được thực hiện trong Redux.
Các tài liệu đề xuất đúng rằng các cuộc gọi mạng nằm trong số actions
của bạn. Tôi muốn đưa chúng vào một nơi riêng biệt, bạn có thể gọi nó là "dịch vụ". Ở đó bạn sẽ định nghĩa tất cả các hằng số của bạn như URL máy chủ API, các công cụ liên quan đến xác thực, v.v. Đây sẽ là nơi duy nhất nhận thức được chi tiết thực hiện các cuộc gọi mạng của bạn - thư viện nào bạn sử dụng (jQuery, axios, superagent, v.v.)
Tệp tác vụ của bạn sẽ nhập chức năng từ các dịch vụ đó và gọi cho chúng. Nếu sau này bạn quyết định trao đổi thư viện mạng, bạn sẽ không phải thay đổi số actions
.
- 1. Làm thế nào để thực hiện đúng các cuộc gọi REST từ ứng dụng ReactJS + Redux?
- 2. Lỗi khi sử dụng thành phần được thực hiện với phản ứng, redux và phản ứng-redux và xây dựng với webpack trong ứng dụng phản ứng
- 3. Thực hiện các cuộc gọi mạng định kỳ khi ứng dụng iOS ở chế độ nền
- 4. Triển khai ứng dụng phản ứng-redux trong AWS S3
- 5. Tích hợp phản ứng-redux vào ứng dụng Angularjs hiện có
- 6. Phản ứng/Redux + Soundcloud API
- 7. Không thể thực hiện cuộc gọi API sử dụng phản ứng gốc
- 8. Thực hiện cuộc gọi programatically từ ứng dụng iphone và trở lại ứng dụng sau khi kết thúc cuộc gọi
- 9. Sử dụng Akka để thực hiện cuộc gọi dịch vụ web từ ứng dụng Play
- 10. Phản ứng-Redux tokens client-side
- 11. Bộ định tuyến phản ứng nơi sử dụng AJAX
- 12. thực hành tốt nhất để xử lý các sai sót trong Redux và Phản ứng
- 13. Thực hiện cuộc gọi mạng đơn giản để truy xuất JSON trong Unity?
- 14. Thực hiện cuộc gọi api từ các thành phần câm với Redux
- 15. React Redux và phản ứng-router-dom
- 16. Nơi lưu trữ các luồng WebRTC khi xây dựng ứng dụng React với redux
- 17. Làm thế nào để kiểm tra trạng thái mạng trong ứng dụng phản ứng bản địa
- 18. Danh sách tất cả các cuộc gọi chức năng được thực hiện trong một ứng dụng
- 19. Cài đặt phản ứng-redux trong dự án Rails
- 20. Thực hiện cuộc gọi cURL trong C#
- 21. Thực hiện cuộc gọi ajax trong clojurescript
- 22. Lỗi CORS trong khi thực hiện cuộc gọi axios.get
- 23. Trạng thái được chuyển đến bộ chọn trong ứng dụng phản ứng-redux như thế nào?
- 24. Thực hiện cuộc gọi REST trong Node.js yêu cầu chứng chỉ ứng dụng khách để xác thực
- 25. Nock không chặn cuộc gọi API trong kiểm tra Redux
- 26. Phản ứng, Redux, Phản ứng-Router - Stuck tại cài đặt tài liệu-ui
- 27. Phản ứng-Redux URL cơ sở get trang web/window.location
- 28. Sự khác biệt giữa phản ứng-router 4.0, phản ứng-router-dom và phản ứng-router-redux là gì?
- 29. Cuộc gọi đa luồng trong ứng dụng Windows Forms?
- 30. Cuộc gọi Ajax gây ra mạng :: ERR_INCOMPLETE_CHUNKED_ENCODING