Переопределение значения const - PullRequest
0 голосов
/ 19 ноября 2018

Итак, я читал статью , споткнулся и увидел это CodePen и увидел, что в методе increment он устанавливает count как const, и я вполнене может обработать это, что Как вы можете переопределить const?Может кто-нибудь объяснить, что мне не хватает?

  state = {
    count: 0
  };

  // Increase count
  increment = () => {
    const { count } = this.state;
    return this.setState({ count: count + 1 });
  };

Зачем объявлять const, когда вы можете использовать let или var, потому что использование const весьма запутанно, зная, что деконструированная переменная будетманипулировать?

Ответы [ 4 ]

0 голосов
/ 19 ноября 2018

Когда вы делаете const { count } = this.state;, вы фактически создаете копию из this.state.count, не манипулируя this.state.count напрямую.

И const, чтобы случайно не манипулировать им, если вам не нужно.

В следующих примерах фрагментов кода при обновлении «копии» count не обновляется state.count

(нажмите на Run Code Snippet, чтобы увидеть результат).

const state = { count: 0 };
let {count} = state;
count += 999;

console.log(`state.count`, state.count);
console.log(`count`, count);

И это не удастся (несчастно).

const state = { count: 0 };
const {count} = state;
count += 999;

console.log(`state.count`, state.count);
console.log(`count`, count);
0 голосов
/ 19 ноября 2018

Код не переопределяет поведение const. Приращение происходит не путем изменения значения переменной const count, а путем вызова setState, который заменит (асинхронно) все состояние компонента. Затем при следующем вызове увеличения или уменьшения count получит новое значение через деконструирующее присвоение от this.state - это не изменение значения переменной, это новая переменная (локальная для функции приращения) ) каждый раз increment вызывается.

0 голосов
/ 19 ноября 2018

Вы не можете переопределить const, это означает, что вы не можете переназначить const.

const a = 1;
a = 2; // you will get TypeError.  *** numbers and strings are also immutable

, но вы можете изменить константу без переназначения типа

const b = {};
b.a = 'new property'; // { a: "new property" }

const c = [];
c[0] = "new stack"; // ["new stack"]

Вы можете изменитьно вы не можете переназначить const.

0 голосов
/ 19 ноября 2018

Вы не можете переназначить const. Есть причина, по которой она называется const, сокращенная форма для constant. Это означает, что после того, как вы его определили, его нельзя переназначить.

Переменная, которая должна и должна быть переназначена, должна быть объявлена ​​как let.

let a = 'a';
a = 'new value'; // this is allowed

const x = 'x';
x = 'new value'; // this is not allowed

var также позволит вам переназначить значение, но это старая нотация, и вам, в большинстве случаев, вам не понадобится использовать var, за исключением редких конкретных случаев.

В коде из вопроса

const { count } = this.state;

значение счетчика деструктурируется из состояния и присваивается переменной с именем count, что означает, что это копия значения this.state.count, а не this.state.count сама по себе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...