Alternatif bir yol, react-redux kullanıyorsanız ve bu eyleme yalnızca tek bir yerde ihtiyaç duyuyorsanız VEYA bir HOC (Daha yüksek bileşen, gerçekten önemli olanın html'nizi şişirebileceğini anlamanıza gerek yok) ihtiyacınız olan her yerde bu erişim, eyleme geçirilen ek parametrelerle mergeprops kullanmaktır :
const mapState = ({accountDetails: {stateOfResidenceId}}) => stateOfResidenceId;
const mapDispatch = (dispatch) => ({
pureUpdateProduct: (stateOfResidenceId) => dispatch({ type: types.UPDATE_PRODUCT, payload: stateOfResidenceId })
});
const mergeProps = (stateOfResidenceId, { pureUpdateProduct}) => ({hydratedUpdateProduct: () => pureUpdateProduct(stateOfResidenceId )});
const addHydratedUpdateProduct = connect(mapState, mapDispatch, mergeProps)
export default addHydratedUpdateProduct(ReactComponent);
export const OtherHydratedComponent = addHydratedUpdateProduct(OtherComponent)
MergeProps'u kullandığınızda, geri döndüğünüz şey props'a eklenir, mapState ve mapDispatch yalnızca mergeProps için argümanlar sağlamak için hizmet eder. Yani, başka bir deyişle, bu işlev bunu bileşen props'larınıza (typcript sözdizimi) ekleyecektir:
{hydratedUpdateProduct: () => void}
(işlevin aslında eylemin kendisini döndürdüğünü ve void olmadığını unutmayın, ancak çoğu durumda bunu göz ardı edeceksiniz).
Ama yapabilecekleriniz:
const mapState = ({ accountDetails }) => accountDetails;
const mapDispatch = (dispatch) => ({
pureUpdateProduct: (stateOfResidenceId) => dispatch({ type: types.UPDATE_PRODUCT, payload: stateOfResidenceId })
otherAction: (param) => dispatch(otherAction(param))
});
const mergeProps = ({ stateOfResidenceId, ...passAlong }, { pureUpdateProduct, ... otherActions}) => ({
...passAlong,
...otherActions,
hydratedUpdateProduct: () => pureUpdateProduct(stateOfResidenceId ),
});
const reduxPropsIncludingHydratedAction= connect(mapState, mapDispatch, mergeProps)
export default reduxPropsIncludingHydratedAction(ReactComponent);
bu, sahne elemanlarına aşağıdaki şeyleri sağlayacaktır:
{
hydratedUpdateProduct: () => void,
otherAction: (param) => void,
accountType: string,
accountNumber: string,
product: string,
}
Genel olarak, redux bakımcıları, paketlerinin işlevselliğini, bu tür istekleri iyi bir şekilde kapsayacak şekilde genişletmekle birlikte, ekosistemin parçalanmasını desteklemek OLMADAN bu işlevler için bir model oluşturacağını gösterdiler.
Vuex gibi çok inatçı olmayan paketler, anti-modelleri kötüye kullanan insanlarla neredeyse o kadar çok sorun yaşamazlar çünkü kaybolurlar, aynı zamanda redux ve en iyi destekleyici paketlerle arşivleyeceğinizden daha az düz yazı ile çok daha temiz bir sözdizimi destekler. Ve paketin çok daha çok yönlü olmasına rağmen, dokümantasyonun anlaşılması daha kolaydır, çünkü redux dokümantasyonunun yapma eğiliminde olduğu gibi detaylarda kaybolmazlar.