Функция стрелки не должна возвращать присваивание Eslint - PullRequest
3 голосов
/ 17 апреля 2020

Я сопоставляю значение, которое возвращается из API, и добавляю фиктивное значение в качестве защитного кода, если значение отсутствует. Для этого я использую JS Карта для получения результата. Но, к сожалению, я получаю ошибку eslint Arrow function should not return assignment. Здесь я делюсь кодом того, что я реализовал. Просьба проверить и посоветовать мне лучшее решение. Я не хочу отключать ошибки eslint. Заранее спасибо.

Код:

 const chartData = res.data.map(
    (data) => data.latestMetric = data.latestMetric === null ? dummyLatestMetric : data.latestMetric
  );

Ошибка:

Arrow function should not return assignment. eslint (no-return-assign)

Ответы [ 4 ]

1 голос
/ 17 апреля 2020

Функция стрелки

Выражение функции стрелки является синтаксически компактной альтернативой регулярному выражению функции, хотя и без собственных привязок к this, Аргументы, ключевые слова super или new.target. Выражения функций стрелок плохо подходят в качестве методов, и их нельзя использовать в качестве конструкторов.

Функция карты

Метод map () создает новый массив, заполненный результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.


.map() функция потребует, чтобы вы возвращали значение для каждого итерация. Если вы хотите только l oop через массив для выполнения побочных эффектов, вы можете рассмотреть forEach или другую функцию l oop.

В вашем случае, я вижу, вы хотите изменить latestMetric в res.data условно вы можете сделать это:

const chartData = res.data.map(data => ({
  ...data,
  latestMetric: data.latestMetric === null ? dummyLatestMetric : data.latestMetric,
});

Синтаксис распространит свойства data в новый объект, а затем мы условно установим значение latestMetric на основе условия

Если вы не хотите использовать синтаксис распространения, вы также можете использовать традиционный Object.assign метод:

const chartData = res.data.map(data => Object.assign({}, data, {
  latestMetric: data.latestMetric === null ? dummyLatestMetric : data.latestMetric,
});

Что касается вашей защитной стратегии, вас может заинтересовать использование синтаксиса || для этого, но будьте осторожны, так как он проверяет все ложные значения (включает: false, 0, null, undefined, et c.)

const chartData = res.data.map(data => ({
  ...data,
  latestMetric: data.latestMetric || dummyLatestMetric,
});

И последнее, но не менее важное: вам лучше сначала понять правило ESLint и прочитать причину этого практика программирования, чтобы увидеть, хотите ли вы использовать это правило, или изменить его, или даже отключить его для вашего проекта. * 1 054 *

Ссылка: https://eslint.org/docs/rules/no-return-assign

0 голосов
/ 17 апреля 2020

Проблема:

https://eslint.org/docs/rules/no-return-assign

Это правило говорит о том, что вам не разрешено возвращать операции назначения, подобные этой:

return a = 3 // or similar.

Но это именно то, что вы делаете, поэтому

Хитрость в том, чтобы вернуть объект / свойство, а не присваивающую операцию =.

Непонятно, что вас интересует чтобы быть возвращенным в .map, вы хотите вернуть целое data или только data.latestMetric, поэтому мой ответ также состоит из двух случаев:

, если вам нужно изменить data и вернуть попробуйте это:

const chartData = res.data.map(
  data => (data.latestMetric = data.latestMetric === null ? dummyLatestMetric : data.latestMetric) && data
  // updated data.latestMetric and then returning a whole object
);

если вам нужно только data.latestMetric, попробуйте это:

const chartData = res.data.map(
  data => data.latestMetric === null ? dummyLatestMetric : data.latestMetric
);
0 голосов
/ 17 апреля 2020

Вам необходимо вернуть значение:

const chartData = res.data.map((data) => {
  data.latestMetric = data.latestMetric === null ? dummyLatestMetric : data.latestMetric;
  return data;
});
0 голосов
/ 17 апреля 2020

Поскольку вы явно не возвращаете значение из функции стрелки, eslint хочет, чтобы вы использовали функцию с телом.

Это должно исправить:

 const chartData = res.data.map(
    (data) => {
      data.latestMetric = data.latestMetric === null ? dummyLatestMetric : data.latestMetric;
 });
...