代码之家  ›  专栏  ›  技术社区  ›  Matt Anxo P

如何在我自己的高阶组件(hoc)中使用带路由器hoc的React路由器?

  •  1
  • Matt Anxo P  · 技术社区  · 6 年前

    我有一个高阶组件,它使用 location.search 由React Router提供的构造 queryParams 对象并将其作为一个道具传递到其包装的组件。

    function withQueryParams(WrappedComponent) {
        return (props) => {
            const queryParams = myUtils.parseParams(props.location.search); // props.location provided by React Router
            const newProps = {
                ...props,
                queryParams: queryParams
            }
    
            return <WrappedComponent {...newProps} />
        }
    }
    
    export default withQueryParams
    

    我会这样使用它:

    class MyComponent extends React.Component { ... }
    
    export default withQueryParams(MyComponent)
    

    当然我会包起来的 MyComponent 在一条路线上:

    <Route path="/mycomponent" component={MyComponent} />
    

    但回到我的 withQueryParams 我想确保 props.location 总是可用的,这意味着我希望它总是有来自React路由器的道具。进入 withRouter 它本身是由react路由器提供的hoc,您可以使用它来提供这些属性。

    最好的使用方法是什么 屋外的 在我的内心 拒绝帕拉斯 特设以确保 方位位置 有空吗?

    谢谢。

    2 回复  |  直到 6 年前
        1
  •  0
  •   spakmad    6 年前
    function withQueryParams(WrappedComponent) {
            return withRouter((props) => {
               const queryParams = myUtils.parseParams(props.location.search); // props.location provided by React Router
               const newProps = {
                   ...props,
                   queryParams: queryParams
               }
    
               return <WrappedComponent {...newProps} />
            })
    }
    
    export default withQueryParams
    
        2
  •  2
  •   Hardik Modha Jayhello    6 年前

    withRouter withQueryParams recompose https://codesandbox.io/s/y493w29lz

    https://y493w29lz.codesandbox.io/main

    MainComponent
    SubComponent
    "No Query Params available"
    

    https://y493w29lz.codesandbox.io/main?query=hello

    MainComponent
    SubComponent
    Query Params = {"query":"hello"}
    

    SubComponent Route withQueryParms

    export const SubComponent = compose(
      withRouter,
      withQueryParams
    )(SubComponentView);
    

    https://y493w29lz.codesandbox.io/sub?query=hello

    SubComponent
    Query Params = {"query":"hello"}