Mam pewne niedogodności związane z działaniem maszynopisu i działań redux-thunk.Skrypt z programem Redux, jak używać połączenia bez ponownego deklarowania definicji działania?
Zasadniczo moje komponenty intensywnie wykorzystują łączenie reaguj-redux, aby powiązać twórców akcji, problem polega na tym, że kiedy tworzę interfejs dla tych działań redux w ramach komponentu, muszę ponownie zadeklarować definicję funkcji, ponieważ ginie ona w wywołaniu połączenia.
Oto przykładowy kod:
Action Twórca
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;
});
};
}
Komponent
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);
Czy mimo zadeklarować ten binded twórca działania bez konieczności ponownego zadeklarować go za każdym razem na każdy plik?
Dzięki za komentarz, ale to nie jest mój problem, jak można zobaczyć moje działania są już w oddzielnym pliku (import { fetchEntity, } z „działań”;) I” Próbuję radzić sobie z definicjami typów dla moich działań, a konkretnie, ponownie deklarować definicję typu za każdym razem, gdy używam 'connect' w komponencie. – ospfranco
Ok, moje rozumienie maszynopisu przeszkadza mi w udzielaniu większej pomocy :(przepraszam –