доступ к реквизиту вне компонента ho c - запуск реализации в темноте - PullRequest
1 голос
/ 23 февраля 2020

Я пытаюсь получить доступ к реквизиту вне HO C. Я пытаюсь настроить запуск в темноте, и мне нужно, чтобы clientSideID был динамическим c в зависимости от настроек. Я не могу понять, что я делаю неправильно. WithLDProvider - это функция, которая должна обернуть все приложение. Кто-нибудь может мне помочь? Большое вам спасибо!

import React from 'react';
import PropTypes from 'prop-types';
import { withLDProvider } from 'launchdarkly-react-client-sdk';
import { get } from 'lodash';
import { getEnv } from '../helpers/env';
import { LAUNCH_DARKLY } from '../constants/launchdarkly';

const LaunchDarklyProvider = ({ clientSideID }) => {
  console.log('clientSideID provider', clientSideID);
  const LDComponent = withLDProvider({
    clientSideID,
  });

  return <LDComponent />;
};

LaunchDarklyProvider.propTypes = {
  clientSideID: PropTypes.string,
};

const LDProvider = WrappedComponent => {
  const environment = getEnv();
  const { LOCAL, TEST } = LAUNCH_DARKLY;

  const LDProviderHOC = props => {
    const { local } = props;
    const { settings } = local;
    let clientId;

    switch (environment) {
      case 'test':
        clientId = TEST;
        break;
      case 'local':
        clientId = LOCAL;
        break;
      case 'production':
        clientId = get(settings, 'launchDarkly.clientSideId', '');
        break;
      default:
        break;
    }

    return <WrappedComponent {...props} clientSideID={clientId} />;
  };

  LDProviderHOC.propTypes = {
    local: PropTypes.object,
  };

  return LDProviderHOC;
};

export const ToggleProvider = () => LDProvider(LaunchDarklyProvider);

1 Ответ

2 голосов
/ 23 марта 2020

Во-первых, почему бы не сконфигурировать ваш clientSideId как env var и сделать так, чтобы ваша сборка (т. Е. Webpack, et c.) Вставляла его, а не использовала оператор switch?

Если вы связаны чтобы читать в конфиге, как вы делаете выше, почему бы не использовать реализацию basi c:

import { withLDProvider } from 'launchdarkly-react-client-sdk';
import { get } from 'lodash';
import { getEnv } from '../helpers/env';
import { LAUNCH_DARKLY } from '../constants/launchdarkly';

const environment = getEnv();
const { LOCAL, TEST } = LAUNCH_DARKLY;
let clientId;
switch (environment) {
  case 'test':
    clientId = TEST;
    break;
  case 'local':
    clientId = LOCAL;
    break;
  case 'production':
    clientId = get(settings, 'launchDarkly.clientSideId', '');
    break;
  default:
    break;
}

export default withLDProvider({ 
  clientSideID: clientId,
  user: {
    "key": "aa0ceb",
    "name": "Grace Hopper",
    "email": "gracehopper@example.com"
  },
  options: { /* ... */ }
})(YourApp);
...