2016-11-28 18 views
9

Tôi có một chức năng không đồng bộ trong hoạt động Redux của tôi và nó trả về một đối tượng như thế này trong giảm tốc của tôi:thực hành tốt nhất để xử lý các sai sót trong Redux và Phản ứng

{ 
user: {}, 
fetching: false, 
fetched, false, 
error: null 
} 

Vì vậy, về cơ bản khi tôi bắt đầu gọi hàm không đồng bộ I cập nhật tình trạng Redux để fetching: true và nếu kết quả được thực hiện thành công sau đó fetched:truefetching:false
Vì vậy, tôi lập bản đồ các trạng thái Redux đến đạo cụ sử dụng kết nối trong phản ứng-Redux và tôi thêm này trong chức năng làm thành phần của tôi:

if(this.props.fetched) { 
    // Go to next page 
} 

Và nó sẽ tự động chuyển đến trang tiếp theo khi dữ liệu được tìm nạp.
Tuy nhiên, tôi gặp sự cố với việc xử lý lỗi của mình. Khi lỗi thay đổi từ null thành lỗi thì làm thế nào để xử lý lỗi xử lý trên thành phần phản ứng của tôi. Những gì tôi có ngay bây giờ là:

if(this.props.error != null) { 
    // popup error 
} 

Nhưng bây giờ tôi kết thúc trong một tình huống mà thời gian sau, tôi gọi hành động của tôi nó đã có this.props.error giao cho một lỗi và nó không phải là null mà kết quả nó hiển thị popup ngay cả khi không có lỗi.
Tôi có phải đặt lại lỗi của mình mọi lúc được hiển thị hoặc có cách nào tốt hơn để thực hiện toàn bộ điều này không?

Trả lời

7

Bạn có thể sử dụng phần mềm trung gian redux-catch để nắm bắt lỗi cho bộ giảm tốc và phần giữa của Redux.

Bạn có thể sử dụng một cái gì đó như thế nào,

import reduxCatch from 'redux-catch'; 

function errorHandler(error, getState, lastAction, dispatch) { 
    //dispatch ERROR action as you need. 
} 

const store = createStore(reducer, applyMiddleware(
    reduxCatch(errorHandler) 
)); 

Và, hiển thị Lỗi Popup của bạn khi bạn nhận được hành động LỖI mà được kích hoạt từ redux-catch middleware. Khi bạn đóng cửa sổ bật lên, hãy gửi một hành động đặt lại lỗi thành giá trị rỗng để cửa sổ bật lên sẽ không được hiển thị nếu không có lỗi hiển thị.

+0

Điều này có vẻ hữu ích đối với trường hợp tôi muốn báo cáo sự cố. Ý định của tôi là hiển thị một phương thức dựa trên lỗi. Giống như cho phép nói đăng nhập thất bại. – abeikverdi

+0

@abeikverdi Có, bạn có thể gửi hành động với tải trọng là lỗi! Giống như, nó ở ngay đó! – ArchNoob

+0

Tôi hiểu. Vì vậy, tôi có thể tạo một khung nhìn theo trọng tải của tôi và hiển thị cho người dùng? – abeikverdi

1

Tôi đã gặp sự cố tương tự khi tôi có phương thức tiếp tục hiển thị lỗi cũ sau khi tôi đóng phương thức. Tôi đã giải quyết nó bằng cách gửi một hành động "resetErrors" sau khi tôi nhận được một thành công thông qua cuộc gọi lại của mình.

Tôi đã không đi qua một giải pháp tốt hơn khác hơn là "đặt lại" nó mỗi lần.

+0

Yea thats những gì tôi cũng nghĩ. Nhưng bây giờ tôi phải thực hiện rất nhiều hành động thiết lập lại cho các bộ giảm tốc khác nhau và thêm chúng vào tầm nhìn của tôi chỉ cho mục đích này. Vì vậy, tôi nghĩ có lẽ có một cách tốt hơn để làm toàn bộ điều. – abeikverdi

+1

Một hành động đơn lẻ có thể thay đổi bao nhiêu trường tùy ý bạn muốn. Hành động đặt 'fetching' hoặc' fetched' cũng có thể đặt lại lỗi. Điều đó nói rằng, có lẽ nó là tốt nhất để thiết lập lại nó khi phương thức được đóng lại. Lưu ý rằng trong React-Redux, một phương thức thường có thể nhìn thấy nếu và chỉ khi nhà nước nói nó nên được. Trình kích hoạt có thể là lỗi trong trạng thái. Điều này có nghĩa là việc đặt lại lỗi cũng giống như việc đóng phương thức. Ngoài ra, chuyển đổi trang tiếp theo phải là một phần của hành động với trang trong Redux. – DDS

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