将类转换为功能组件

时间:2020-08-18 17:00:46

标签: reactjs

我正在尝试将此类转换为功能组件,但没有运气。谁能 给我方向?

        import { Redirect, Route, RouteProps } from 'react-router'


        function mapStateToProps (state: AppState, ownProps: RouteProps): MappedProps {
          const user = state.auth.user
          return {
            External: user ? user.External : true,
          }
        }

        type InnerRouteProps = RouteProps & MappedProps

        class MyInnerRoute extends React.Component<InnerRouteProps> {
          render () {
            const {
              props: { External, component, render, children, ...rest },
            } = this

            return (
              <Route
                {...rest}
                render={props => {
                  if (External) {
                    return <Redirect to={'/'} />
                  }
                  if (component) {
                    const Component = component
                    return <Component {...props} />
                  }
                  if (render) {
                    return render(props)
                  }
                  return children
                }}
              />
            )
          }
        }

        export default connect(mapStateToProps)(MyInnerRoute)
        

它应该看起来像这样。不知道const道具会在这里。

        const  MyInnerRoute = ()  =>  {
          
          return (
            <Route
              {...rest}
              render={props => {
                if (External) {
                  return <Redirect to={'/'} />
                }
                if (component) {
                  const Component = component
                  return <Component {...props} />
                }
                if (render) {
                  return render(props)
                }
                return children
              }}
            />
          )
          
        }

        export default MyInnerRoute

2 个答案:

答案 0 :(得分:1)

您的道具将通过功能参数进入,就像这样:

const MyInnerRoute = (props: InnerRouteProps) => {...

然后您可以像以前在课堂上一样使用它们。

const { External, component, render, children, ...rest } = props

答案 1 :(得分:0)

这应该可以完成工作。

const  MyInnerRoute = ({ External, component, render, children, ...rest })  =>  {
          
          return (
            <Route
              {...rest}
              render={props => {
                if (External) {
                  return <Redirect to={'/'} />
                }
                if (component) {
                  const Component = component
                  return <Component {...props} />
                }
                if (render) {
                  return render(props)
                }
                return children
              }}
            />
          )
          
        }

        export default MyInnerRoute