【发布时间】:2017-12-05 07:43:58
【问题描述】:
所以,我一直在尝试将我的应用程序切换到 React Router v4(api 发生了很大变化),这就是我到达的地方:
路由器设置
const createStoreWithMiddleware = applyMiddleware(
thunkMiddleware,
createLogger
)(createStore);
const store = createStoreWithMiddleware(rootReducer);
const RouterLayout = () => (
<Provider store={store}>
<App>
<Switch>
<Route component={Login} path="/login" />
<Route component={AccountDetails} path="/account/:id" />
</Switch>
</App>
</Provider>
);
const routes = (
<HashRouter>
<RouterLayout />
</HashRouter>
);
ReactDOM.render(routes, document.getElementById("app-container"));
现在我的问题是,由于某种原因,我无法将 redux 连接到我的组件:
export class Login extends React.Component<any, any> {
componentDidMount() {
console.log(this.props);
// this.props.dispatch is undefined
// I'm getting however router props:
// match: Object, location: Object, history: Object, staticContext: undefined)
}
render() {
return (
<div>
This is the Login Component
</div>
);
}
}
export default connect((state: AppState): any => {
return state;
})(Login);
有趣的是App 组件可以毫无问题地连接并访问dispatch,但Login 没有它。我很确定我做错了什么,但我不知道到底是什么。
【问题讨论】:
-
您在 App 中的调度情况如何?是通过 react-redux 连接的吗?
-
@D-reaper 是的,与我在
Login中获取dispatch的方式完全相同(相同的代码)。 -
您没有使用 mapDispatchToProps 函数(connect 中的第二个参数),您是如何获得调度的?
-
@D-reaper 不知道该告诉你什么,但它是相同的代码,我将尝试清理
App中的代码(仅保留相关位)并发布它为了清楚起见。但是它是相同的代码,我没有将第二个参数传递给connect。
标签: javascript reactjs typescript react-router