2017-05-05 77 views
1

試圖用typescript和redux構建一個簡單的反應crud應用程序,並遇到以下問題。我有一個函數,它具有指定的簽名,它將採用一個人物作爲參數,如此處所示。mapDispatchToProps with typingcript正在困難

export default function savePerson(person: Person) { 
    return async (dispatch: any) => { 
     let newPerson = await axios.post('/api/people/addPeron', person); 
     dispatch(addPersonSuccess(person)); 
    } 
} 

現在,當我想我的組件connnect到我有與mapDispatchToProps麻煩終極版。這是我的代碼。

function mapDispatchToProps(dispatch: any) { 
    const actions = { 
    savePerson:() => dispatch(savePerson()) 
    } 
    return actions; 
} 

的問題是,savePerson功能需要一個人傳遞給它,但是我沒有訪問我的狀態在mapDispatchToProps,而且由於功能缺失的論點我的代碼不會編譯。有任何想法嗎?

與Solution編輯:

這裏是使此代碼工作所需的一個變化的代碼。

function mapDispatchToProps(dispatch: any) { 
    const actions = { 
    savePerson: (person: Person) => dispatch(savePerson(person)) 
    } 
    return actions; 
} 

我不得不人物對象傳遞給我正在調用dispatch匿名函數。

回答

0
import {IStoreState} from "myGlobalTypes" 
import {Dispatch} from "redux"; 

interface IMyComponentProps { 
    savePerson: (person: Person) => Promise<void>; 
} 
class MyComponent extends React.Component<IMyComponentProps, void>{ 
    someMethod(person: Person) { 
     this.actions.savePerson(person); 
    } 
} 

const WrappedComponent = connect(
    (state: IStoreState, ownProps: {}) => ({ 
     // here you can map state 
    }), 
    (dispatch: Dispatch<IStoreState>) => ({ 
     // savePerson: (person: Person) => dispatch(savePerson(person)) 
     actions: { 
     savePerson: (person: Person) => dispatch(savePerson(person)) 
     } 
    } 

);

+0

我從你的答案中得到的主要結果是,我沒有將人物對象傳遞給我調用dispatch的匿名函數,一旦我做了它的工作。現在接受這個答案。 –