как экспортировать константу, которая находится внутри функции? — ReactJS

#javascript #node.js #reactjs #react-native

#javascript #node.js #reactjs #react-native

Вопрос:

В вызываемом файле File_A.js у меня есть функция, которая содержит константу. Я хочу экспортировать эту константу, и только эту (не всю функцию), чтобы использовать значение константы в другом вызываемом файле File_B.js . Я пытался использовать module.exports , но он возвращает, что переменная не определена. Ниже упрощенный пример. Спасибо

 // my function in File_A.js
const MyFunctionA = () => {

  const myVariable = 'hello'
  module.export = {myVariable: myVariable}

  return (
  /*...*/
  );
}

// my second function in File_B.js
const MyFunctionB = () => {

  const {myVariable} = require('./File_A.js');
  console.log(myVariable) // undefined

  return(
  /*...*/
  );
} 

Комментарии:

1. Не так ли module.exports s помощью)?

2. Module.export должен находиться в глобальной области видимости, так как он не будет назначен до тех пор, пока не будет вызвана MyFunctionA.

3. @PraveenKumarPurushothaman — Удивительно, но при том стиле экспорта, который использует OP, вы can…it это просто не очень хорошая идея. 🙂

4. Если это постоянная ссылка на неизменяемую вещь (в данном случае строку), просто переместите ее из функции на верхний уровень, нет причин скрывать ее в замыкании.

5. @Ти Джей Краудер Благодарит человека. Это что-то новое, что я узнал сегодня.

Ответ №1:

как экспортировать константу, которая находится внутри функции?

На это есть два ответа:

  1. Вы этого не делаете. Это не имеет смысла. Вместо этого вы перемещаете константу из функции и экспортируете ее.
  2. Вы делаете это точно так же, как и раньше, но константа не будет включена в экспорт модуля, пока MyFunctionA не будет выполнена хотя бы один раз. Это возможно, потому что используемые вами модули в стиле CommonJS являются динамическими и могут меняться во время выполнения. Однако, как вы обнаружили, создание зависимости вашего экспорта от вызова функции вызывает проблемы.

Итак, взяв на вооружение # 1, мы получаем:

 // my function in File_A.js
const myVariable = "hello"; // Odd name for a constant? ;-)
module.exports.myVariable = myVariable;
const MyFunctionA = () => {
    return (
        /*...*/
    );
};
 

Пара замечаний по этому поводу:

  1. MyFunctionA по-прежнему закрывается над константой и ссылается на нее точно так же, как раньше.
  2. myVariable не становится глобальным, потому что область верхнего уровня модуля CommonJS не является глобальной областью.