React JS:如何根据环境变量导出不同的组件?

React JS: How can I export different components based on environment variable?

反应 JS 代码:

我希望 src/app.jsx.env 中的 REACT_APP_AUTH_SERVER 变量不存在或没有其他值时执行 export default App,并在 export default withAuthenticator(App) 时执行 export default withAuthenticator(App) .env 中的 REACT_APP_AUTH_SERVER 变量确实存在,并且具有值 aws-cognito:

src/app.jsx:

import React, { Component } from 'react';
import SecuredGate from './SecuredGate/SecuredGate';
import { withAuthenticator } from '@aws-amplify/ui-react'
import './App.css';
import '../fontStyles.css';

class App extends Component {
  render() {
    return (
      <div>
        <SecuredGate />
      </div>
    );
  }
}

const Result = () => {
  if (process.env.REACT_APP_AUTH_SERVER && process.env.REACT_APP_AUTH_SERVER === "aws-cognito"){
    return withAuthenticator(App);
  } 
  return App;
}


// export default App;
// export default withAuthenticator(App)

export default Result;

但是,这不起作用。

如果我这样做:

export default App;
// export default withAuthenticator(App)

,有效,如果我这样做:

// export default App;
export default withAuthenticator(App)

同样有效。

那我错过了什么?

我认为问题在于 Result 组件 return 是组件而不是元素。要更好地理解这一点,请查看 App 组件在使用 <App /> 调用时执行的操作。它 运行 是其主体中的代码, return 是一些标记。但是如果你调用 <Result /> 会发生什么?它将 运行 块中的代码和 return 另一个组件(函数)。所以要解决这个问题,你可以尝试:

const Result = (process.env.REACT_APP_AUTH_SERVER && process.env.REACT_APP_AUTH_SERVER === "aws-cognito")
    ? withAuthenticator(App)
    : App;
}

export default Result;