Reactjs 使用dispatch和getState时的Redux操作返回类型
我正在努力弄清楚我的行动应该是什么样的回报类型。当我使用Reactjs 使用dispatch和getState时的Redux操作返回类型,reactjs,typescript,redux,redux-thunk,Reactjs,Typescript,Redux,Redux Thunk,我正在努力弄清楚我的行动应该是什么样的回报类型。当我使用any时,一切都正常,但我尽量避免使用any export const saveValue = (value: number): any => { return (dispatch: Dispatch<SaveValue>, getState: () => State): void => { axios.post('www.exampleurl.com', value)
any
时,一切都正常,但我尽量避免使用any
export const saveValue = (value: number): any => {
return (dispatch: Dispatch<SaveValue>, getState: () => State): void => {
axios.post('www.exampleurl.com', value)
.then((response) => {
const someValueFromState = getState().stateValue;
const payload = {...response, someValueFromState}
dispatch({ type: constants.SAVE_VALUE, payload });
});
};
};
但一旦我添加了getState,我就不知道该怎么做了。我尝试将返回值放入变量中,可以看到我正在创建的对象是constmytrunt:(dispatch:dispatch,getState:()=>State)=>void
,但当我尝试按如下方式使用它时,它不起作用:
export const saveValue = (value: number): (dispatch: Dispatch<SaveValue>, getState: () => StoreState) => void => {
return (dispatch: Dispatch<SaveValue>, getState: () => State): void => {
axios.post('www.exampleurl.com', value)
.then((response) => {
const someValueFromState = getState().stateValue;
const payload = {...response, someValueFromState}
dispatch({ type: constants.SAVE_VALUE, payload });
});
};
};
export const saveValue=(值:number):(分派:分派,getState:()=>StoreState)=>void=>{
return(dispatch:dispatch,getState:()=>State):void=>{
axios.post('www.exampleurl.com',value)
。然后((响应)=>{
const someValueFromState=getState().stateValue;
常量有效负载={…响应,someValueFromState}
分派({type:constants.SAVE_VALUE,payload});
});
};
};
这样做,我会得到一个错误:声明类型既不是'void'也不是'any'的函数必须返回一个值。
编辑:
只是补充一下,我不能像以前一样返回
Dispatch
,否则我会得到这个错误:Type'(Dispatch:Dispatch,getState:()=>State)=>void'不能分配给类型'Dispatch'
一个朋友帮我回答了这个问题。这是正确的做法:
export const saveValue = (value: number): (dispatch: Dispatch<SaveValue>, getState: () => State): void => {
return (dispatch: Dispatch<SaveValue>, getState: () => State): void => {
axios.post('www.exampleurl.com', value)
.then((response) => {
const someValueFromState = getState().stateValue;
const payload = {...response, someValueFromState}
dispatch({ type: constants.SAVE_VALUE, payload });
});
};
};
但接口必须是:
interface MapDispatchToPropsInterface {
saveValue : (saveDetails: CheckedVisit) => (dispatch: Dispatch<SaveValue>, getState: () => StoreState) => void;
}
接口映射DispatchTopropsInterface{
saveValue:(saveDetails:CheckedVisit)=>(dispatch:dispatch,getState:()=>StoreState)=>void;
}
我想您仍然只需要导出const saveValue=(值:number):Dispatch=>{
当我这样做时,它会显示Type'(Dispatch:Dispatch,getState:()=>State)=>void'不可分配给类型'Dispatch'
当我尝试此操作时,我在第一行出现语法错误:void=>
。似乎使用react-redux的内置ThunkAction
是正确的方法。
interface MapDispatchToPropsInterface {
saveValue : (value: number) => Dispatch<SaveValue>;
}
const mapDispatchToProps: MapDispatchToPropsInterface = {
saveValue : ActionCreators.saveValue,
};
interface MapDispatchToPropsInterface {
saveValue : (saveDetails: CheckedVisit) => (dispatch: Dispatch<SaveValue>, getState: () => StoreState) => void;
}