Bes*_*ess 4 typescript reactjs react-router connected-react-router
连接的 React Router 导出类型RouterState非常好!但是我没有看到match. 假设这些也可以导入并添加到减速器中,例如在RouterState下面和减速器中使用:
const rootReducer = (history: History) => combineReducers({
count: counterReducer,
router: connectRouter(history)
})
export interface State {
count: number
router: RouterState
}
Run Code Online (Sandbox Code Playgroud)
没有它,你就不能真正this.props.match在连接的组件中使用它来匹配参数等。对于那些使用 TypeScript 并且还需要添加到 reducer 的人,这里有解决方法吗?还是我在这里遗漏了一个关键部分?非常感谢!
你有 2 种方法来做到这一点。
createMatchSelector内部函数从您的状态中mapStateToProps提取match。演示import * as React from "react";
import { connect } from "react-redux";
import { createMatchSelector } from "connected-react-router";
import { match } from "react-router";
import { State } from "./reducers";
interface StateProps {
match: match<{ name?: string }>;
}
const Hello = (props: StateProps) => (
<div>Hello {props.match.params.name}!</div>
);
const mapStateToProps = (state: State) => {
const matchSelector = createMatchSelector("/hello/:name");
return {
match: matchSelector(state)
};
};
export default connect<StateProps>(
mapStateToProps,
null
)(Hello);
Run Code Online (Sandbox Code Playgroud)
match直接从路由器获取,而不是从状态获取。演示import * as React from "react";
import { RouteComponentProps, withRouter } from "react-router";
const Hello = (props: RouteComponentProps<{ name?: string }>) => (
<div>Hello {props.match.params.name}!</div>
);
export default withRouter(Hello);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4403 次 |
| 最近记录: |