Tôi đã thấy các câu trả lời xung đột (hoặc chỉ gây nhầm lẫn với tôi) trong các câu hỏi khác ở đây về việc sử dụng getState
trong một hành động có được chấp nhận hay không và tôi đã thấy khá nhiều lần nó được gọi là chống mẫu. Đối với tôi, nó có vẻ hoạt động tốt nhưng thực hành tốt nhất để làm điều này là gì nếu chúng ta không sử dụng getState
?Có sử dụng getState trong thực hành tốt Redux Thunk không?
Tôi đang sử dụng getState
trong một đoạn để lọc qua một mảng người dùng hiện đang kết nối với một số dữ liệu giả và bị kéo vào trạng thái của ứng dụng.
Đây là mã cho hành động của tôi:
export const accountLogInSuccess = user => ({
type: types.ACCOUNT_LOG_IN_SUCCESS,
user,
});
export const accountLogOutSuccess =() => ({
type: types.ACCOUNT_LOG_OUT_SUCCESS,
});
export const accountCheckSuccess =() => ({
type: types.ACCOUNT_CHECK_SUCCESS,
});
export const accountCheck =() => (
(dispatch, getState) => {
dispatch(ajaxCallBegin());
return apiAccount.accountCheck().then((account) => {
if (account) {
const user = findByUID(getState().users, account.uid);
dispatch(accountLogInSuccess(user));
toastr.success(`Welcome ${user.nameFirst}!`);
} else {
dispatch(accountLogOutSuccess());
}
dispatch(accountCheckSuccess());
}).catch((error) => {
dispatch(ajaxCallError(error));
toastr.error(error.message);
throw (error);
});
}
);
Và giảm tốc của tôi:
export default function reducerAccount(state = initial.account, action) {
switch (action.type) {
case types.ACCOUNT_LOG_IN_SUCCESS:
return Object.assign({}, state, action.user, {
authenticated: true,
});
case types.ACCOUNT_LOG_OUT_SUCCESS:
return Object.assign({}, {
authenticated: false,
});
case types.ACCOUNT_CHECK_SUCCESS:
return Object.assign({}, state, {
initialized: true,
});
default:
return state;
}
}
Các trạng thái ban đầu của tài khoản được sử dụng trong giảm tốc của tôi chỉ là:
account: {
initialized: false,
authenticated: false,
},
Các Hành động accountCheck
chuyển người dùng (được tìm thấy bằng cách sử dụng getState
vàChức năng) vào accountLogInSuccess
trong đó bộ giảm thêm giá trị của nó vào trạng thái hiện tại của tài khoản qua Object.assign
.
Không muốn đưa người dùng vào thư mục gốc của ứng dụng và sau đó chuyển nó xuống qua đạo cụ, cách tốt nhất để thực hiện điều này trong Redux và dữ liệu người dùng có sẵn ở trạng thái là gì? Một lần nữa, bằng cách sử dụng getState
trong thunk hoạt động tuyệt vời cho tôi cho đến nay, nhưng có một giải pháp tốt hơn cho điều này mà không được coi là một mô hình chống?