从 React Relay Container 获取组件

Get component from react relay Container

如何从 React Relay Container 获取 Component 获取静态变量?

从“./pages/home”导入主页;

console.log(Home.route) // 未定义

我需要类似 Home.Component.route // 对象

class Home extends React.Component {
  static route = {
    component: Home,
    route: HomeRoute,
    leftButton: false,
    sideMenu: false,
  };

  render() {
    return (
      <View style={styles.container}>
        <Text>
          Home
        </Text>
        <Text>
            {this.props.greetings.hello}
        </Text>
      </View>
    );
  }
}

export default Relay.createContainer(Home, {
  fragments: {
    greetings: () => Relay.QL`
      fragment on Greetings {
        hello,
      }
    `,
  }
});

我认为如果不执行以下操作之一,就无法静态地解决此问题。

备选方案 1:添加包装组件的显式 export

// In "Home.js":
export class HomeComponent extends React.Component {
  static route = {
    // ...
  }
}

export default Relay.createContainer(HomeComponent, {
  // ...
});

// In "Other.js":
import Home, {HomeComponent} from './Home.js';

console.log("should have access here", HomeComponent.route);

备选方案 2:在导出前向容器添加属性

const HomeContainer = Relay.createContainer(
  // ...
);

HomeContainer.route = {
  // ...
};

export default HomeContainer;

方案3:运行时通过refs访问

一旦容器被安装并且你有一个对它的引用,你可以通过 "component" ref 获取原始组件。请注意,这没有记录在案,因此不能保证将来会起作用。

// In "Other.js":
render() {
  return (
    <Home
      ref={
        container => (
          console.log(container.refs.component.route)
        )
      }
    />
  );
}

显然,这是三个备选方案中最骇人听闻的一个,所以我可能不会推荐它。