无法从React组件

时间:2017-08-15 14:55:40

标签: reactjs react-redux redux-thunk

我的行动中有以下功能

export const fetchDeviceData = (deviceData: Object): ThunkAction => (dispatch: Dispatch, getState: GetState, axios: any) => {

    console.log('inside fetchDeviceData', deviceData);
    return dispatch(fetchDeviceDataAPI(axios, url, deviceData));

};

我在组件的componentDidMount()块中以下面的方式调用它

// type declaration (imported from a separate file)
export type DeviceReg = {
    [deviceData: Object]: {
        readyStatus: string,
        err: any,
        payload: Object,
    }
};

// Prop type declaration
type Props = {
    device_reg: DeviceRegType,
    fetchDeviceData: () => void,
}

componentDidMount() {
    const x = this.getDeviceData();
    console.log('header mount mobile', x);
    action.fetchDeviceData(x);
}

// The connector
const connector: Connector<{}, Props> = connect(
    ({ device_reg }: Reducer) => ({ device_reg }),
    (dispatch: Dispatch) => ({
        fetchDeviceData: (deviceData) => dispatch(action.fetchDeviceData(deviceData)),
    }),
);
export default Header;

问题是,当我在函数中包含参数dispatch: Dispatch, getState: GetState, axios: any时,fetchDeviceData(x)函数没有被调用,但它的工作原理是其他方式。导入和依赖关系不是问题,因为我已经验证了它们的次数。

任何建议,提示或解决方案都会有很大帮助。如果您需要有关我的问题的任何澄清或背景,请告诉我。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试从axios: any删除dispatch: Dispatch, getState: GetState, axios: any吗?

我认为应该只有dispatch和getState,因为这是由redux-thunk注入的。

答案 1 :(得分:0)

尝试更改连接代码以使用对象形式:

connect(
    <yourMapStateToProps>,
    {
        fetchDeviceData: actions.fetchDeviceData,
    }     
)

这应该使fetchDeviceData可用作你要求的支柱。

此外,尝试从功能签名中删除axios参数,只留下dispatchgetState