gpt4 book ai didi

reactjs - 为 `match` 连接 React Router 和 TypeScript

转载 作者:行者123 更新时间:2023-12-03 20:15:39 29 4
gpt4 key购买 nike

连接的 React Router 导出类型 RouterState太好了!但是我没有看到 match 的类型.假设这些也可以导入并添加到 reducer 中,例如 RouterState在下面和 reducer 中使用:

https://github.com/supasate/connected-react-router/blob/master/examples/typescript/src/reducers/index.ts#L13

const rootReducer = (history: History) => combineReducers({
count: counterReducer,
router: connectRouter(history)

})

export interface State {
count: number
router: RouterState
}

没有它你就不能真正使用 this.props.match在连接的组件等中匹配参数等。对于那些使用 TypeScript 并且还需要添加到 reducer 的人,这里有解决方法吗?还是我在这里遗漏了一个关键部分?非常感谢!

最佳答案

你有 2 种方法来做到这一点。

  • 您可以使用 createMatchSelector内部函数mapStateToProps提取 match从你的州。 DEMO
  • 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);
  • 您可以获得match直接来自路由器,而不是来自状态。 DEMO
  • 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);

    关于reactjs - 为 `match` 连接 React Router 和 TypeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55940906/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com