web-dev-qa-db-fra.com

Modifier la valeur de la variable importée dans ES6

J'utilise des modules ES6 et j'importe une variable de moduleA dans moduleB:

//moduleA.js
let a = 5;
let b;

export { a, b };

//moduleB.js
import { a, b } from './moduleA'

a = 6;
b = 1;

Mais en cas de changement/affectation dans moduleB je reçois une erreur telle que:

a = 6;

ReferenceError: a n'est pas défini

En revanche je peux console.log(a) dans moduleB.

Il semble qu'il n'est pas possible d'assigner aux variables importées? Est-ce vrai ou est-ce que je manque la façon de le faire? Pourquoi n'est-ce pas possible?

15
croraf
import { a, b } from './moduleA'

est similaire à

const a = ...
const b = ...

en ce que vous ne pouvez pas attribuer la valeur par la suite. Ce n'est pas tout à fait la même chose car les valeurs can changent, mais elles ne peuvent être changées qu'à partir de inside le module. Donc tu pourrais faire

let a = 5;
function setA(value) {
  a = value;
}

export { a, setA };

avec

import { a, setA } from "./moduleA";

setA(4);
console.log(a); // 4

De l'extérieur d'un module, vous pouvez muter une valeur, comme vous le feriez avec const, comme si vous modifiez une propriété sur un objet, mais vous ne pouvez pas faire pointer la variable sur un objet entièrement différent.

21
loganfsmyth

Vous pouvez utiliser un objet au lieu de variables, comme ceci la référence ne change pas:

//moduleA.js
let object = {
    a: 5,
};

export { object };

//moduleB.js
import { object } from './moduleA'

object.a = 6;
object.b = 1;
9
Troopers