2017-07-04 42 views
0

我在调用thunk和异步时遇到问题。因此,这里是我的代码:重新启动调度不起作用

function fetchProvider() { 
    return (dispatch) => { 
    graphqlService(fetchProviderQuery) 
     .then((result) => { 
     dispatch({ 
      type: FETCH_PROVIDER, 
      data: result.data.data.CurrentProvider, 
     }); 
     }); 
    }; 
} 

class Dashboard extends React.Component { 
    componentDidMount() { 
    this.props.fetchProvider(); 
    } 

    render() { 
    const { provider } = this.props; 

    return (
     <div> 
     <ul> 
      <li>id: {provider.id}</li> 
      <li>name: {provider.name}</li> 
      <li>description: {provider.description}</li> 
     </ul> 
     </div> 
    ); 
    } 
} 

const mapStateToProps = (state) => ({ 
    provider: state.provider, 
}); 

const mapDispatchToProps = (dispatch) => ({ 
    fetchProvider:() => dispatch(fetchProvider()), 
}); 

export default connect(mapStateToProps, mapDispatchToProps)(Dashboard); 

我不知道为什么,但派遣内部fetchProvider行动的创建者不起作用。 graphqlService运行良好,在调度FETCH_PROVIDER动作数据传递到调度的时刻是正确的,但随后出现问题,减速器不会使用此操作调用。什么可能会导致这个问题?

+0

你用'@ connect'装饰器装饰了你的'Dashboard'吗? Ifaik你需要它,能够调用调度功能。请参阅:https://stackoverflow.com/questions/36553814/what-is-the-use-of-connect-decorator-in-react-redux –

+0

@TomDoodler,是的。这是上面代码中的最后一行。 –

+0

在'FETCH_PROVIDER'操作触发之前'state.provider'为空或未定义? – MinusFour

回答

2

最后我发现这个问题。这是由react-router-redux中间件的错误初始化引起的。我通过中间件构造函数来应用中间件而不是构建的中间件。

0

您的thunk必须返回承诺,否则将无法按预期工作。 只要稍微修改fetchProvider功能

function fetchProvider() { 
    return (dispatch) => { 
    return graphqlService(fetchProviderQuery) 
     .then((result) => { 
     dispatch({ 
      type: FETCH_PROVIDER, 
      data: result.data.data.CurrentProvider, 
     }); 
     }); 
    }; 
} 
+0

我试过了,它也不起作用。但实际上它没有任何回报。 –

+0

对不起。我假设'redux-thunk'被正确初始化了? – Ematipico

+0

这里是初始化: 从'redux-thunk'导入thunk; const store = createStore( reducer, applyMiddleware(thunk,routerMiddleware) ); –

相关问题