Как исправить это Eslint Использовать оператор распространения вместо ‘.apply()’

#arrays #reactjs #apply #eslint

#массивы #reactjs #применить #eslint

Вопрос:

Я изучаю react и не понимаю, как это исправить. Из этого источника
Я смотрю в деталях правила для этого правила:

Используйте оператор распространения вместо ‘.apply ()’.

Но я пытался, но это никогда не работает, чтобы переформатировать этот код в соответствии с этим правилом:

 renderPages() {
    const { pdf, containerWidth, zoom } = this.state;
    const { disableVisibilityCheck } = this.props;
    if (!pdf) return null;
    const pages = Array.apply(null, { length: pdf.numPages });
    return pages.map((v, i) => (
        <PDFPage
            index={i   1}
            key={`pdfPage_${uniqueId()}`}
            pdf={pdf}
            containerWidth={containerWidth}
            zoom={zoom * INCREASE_PERCENTAGE}
            disableVisibilityCheck={disableVisibilityCheck}
        />
    ));
}
  

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

1. Спасибо @TasosBu приятно знать. Я отлаживаю и вижу, что const pages получаю число 1, потому что в PDF есть одна страница

2. Я был неправ @Торд Ларсен! Он наследует его от прототипа функции! Вы должны создать новый массив с const pages = new Array(pdf.numPages)

3. Вторым параметром Array.apply должен быть массив. Почему вы предоставляете объект?

4. Это файл , в котором находится этот код

Ответ №1:

В сообщении предлагается использовать такое выражение:

 const pages = { ...{ length: pdf.numPages }};
  

Например, следующий код компилируется:

 const somePdf = {
  numPages: 10,
  pageSize: 'A4',
}

const pages = { ...{ length: somePdf.numPages }};

console.log(JSON.stringify(pages))

// returns "{ length: 10}"
  

Ответ №2:

Я думаю, что это правило не так важно, поэтому, если вы хотите, вы можете просто отключить правило, добавив эту строку в свои правила в eslintrc.js файле:

 'rules': {
  ...
  'prefer-spread': ['off']
}