मुझे टाइपस्क्रिप्ट और रेडक्स-थंक क्रियाओं के साथ कुछ असुविधाएं हैं।रेडक्स के साथ टाइपस्क्रिप्ट, क्रिया परिभाषा को फिर से घोषित किए बिना कनेक्ट का उपयोग कैसे करें?
असल में मेरे घटक प्रतिक्रिया निर्माताओं को बांधने के लिए प्रतिक्रिया-रेडक्स कनेक्ट का भारी उपयोग करते हैं, समस्या यह है कि जब मैं घटक के भीतर इस रेडक्स क्रियाओं के लिए इंटरफ़ेस बनाता हूं, तो मुझे फ़ंक्शन परिभाषा को फिर से घोषित करना पड़ता है क्योंकि यह खो जाता है कनेक्ट कॉल पर।
यहां एक नमूना कोड है:
कार्रवाई प्रजापति
import api from './api';
import { Dispatch } from 'redux';
import { IReduxAction } from 'model';
export const FETCH_ENTITY = 'location/FETCH_ENTITY';
export function fetchEntity(id: string) {
return (dispatch: Dispatch<IReduxAction>) => {
dispatch({type: `${FETCH_ENTITY}_REQUEST`, payload: {id}});
return api.fetchEntity(id)
.then((res) => {
dispatch({ type: `${FETCH_ENTITY}_DONE`, payload: res });
return res;
})
.catch((err) => {
dispatch({type: `${FETCH_ENTITY}_FAIL`, payload: err, error: true});
throw err;
});
};
}
घटक
import * as React from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import {
fetchEntity,
} from 'actions';
interface IStateProps {
startingEntities: any[];
}
interface IDispatchProps {
fetchEntity: (id: string) => Promise<any>; // <- this is what I'm trying to get rid of, basically whenever I change the action creator I have to change this definition everytime
}
class Dashboard extends React.Component<IStateProps & IDispatchProps, void> {
public render() {
return (<div>...RENDER SOMETHING...</div>);
}
}
const mapStateToProps = (state: any, ownProps: any) => {
const startingEntities = foo(); // not important
return {
startingEntities,
};
};
const mapDispatchToProps = (dispatch: any) => {
return bindActionCreators({
fetchEntity
}, dispatch);
};
export default connect<IStateProps, IDispatchProps, void>(mapStateToProps, mapDispatchToProps)(Dashboard);
यह हर फिर से घोषित करने के लिए प्रत्येक पर बिना इस आबद्ध कार्रवाई निर्माता घोषित करने के लिए वहाँ वैसे भी है फाइल?
धन्यवाद लेकिन यह है कि मेरी समस्या के रूप में आप अपने कार्यों को एक अलग फाइल में पहले से ही देख सकते हैं नहीं है (आयात { fetchEntity, } 'क्रियाओं' से;), मैं: आप
typeof
उपयोग कर सकते हैं मैं अपने कार्यों के लिए प्रकार परिभाषाओं से निपटने की कोशिश कर रहा हूं, अधिक विशेष रूप से, जब भी मैं किसी घटक में 'कनेक्ट' का उपयोग करता हूं, तो टाइप परिभाषा को फिर से घोषित करता हूं। – ospfrancoठीक है, टाइपस्क्रिप्ट के बारे में मेरी समझ मुझे और मदद करने के लिए रोकती है :(क्षमा करें –