Строка 0: ошибка синтаксического анализа: не удается прочитать свойство «карта» неопределенного »- настраиваемый обработчик TypeScript.

У меня ошибка ./src/hooks/usePagination.tsx Строка 0: Ошибка синтаксического анализа: не удается прочитать карту свойства undefined. Вы знаете, в чем причина? Я провел половину ночи в поисках ответа на stackoferflow и т. Д., И у меня было много неудачных попыток исправить это.

Сначала я подумал о своем формате данных, потому что теперь он

[
    {"id":1,"firstName":"Cori","lastName":"Wescott","email":"[email protected]","gender":"Male","ip_address":"236.58.118.85"},
    {"id":2,"firstName":"Teena","lastName":"Kedge","email":"[email protected]","gender":"Female","ip_address":"74.32.179.20"},
    {"id":3,"firstName":"Englebert","lastName":"Menlove","email":"[email protected]","gender":"Male","ip_address":"91.249.51.126"},
]

и я изменил данные вместо json, но это не помогло. Позже я искал неправильный знак, букву, символ, что угодно - безрезультатно. Наконец, мое исследование подтолкнуло меня к тому, что я прочитал о слишком старой версии npm или другого пакета. Эх, я сдаюсь сейчас ..

Может кто-нибудь найдет проблему.

function App() {
  const [paginationState, paginationActions] = usePagination(dataEntries, 2);
  return (
    <div className="App">
      <h2>Users</h2>
      { !paginationState.isBusy && <PaginatedTable dataEntries={paginationState.entries}/> }
      <Pagination state={paginationState} actions={paginationActions}/>
    </div>
  );
}

export default App;
d.ts file

export interface User {
  id: number
  firstName: string
  lastName: string
}

export interface PaginationState<T> {
  lastPageIdx: number
  actualPageIdx: number
  entries: T[]
  isBusy: boolean
}

export interface PaginationActions {
  goToFirstPage: () => void
  goToPrevPage: () => void
  goToNextPage: () => void
  goToLastPage: () => void
  goToPage: (number: number) => void
}

кастомный крючок

function usePagination<T>(dataEntries: T[], elementsOnPage: number): [PaginationState<T>, PaginationActions] {
  const [actualPageIdx, setActualPageIdx] = useState(1)
  const lastPageIdx = Math.ceil(dataEntries.length / elementsOnPage)
  const [isBusy, setIsBusy] = useState(false)

  useEffect(() => {
    setIsBusy(true)
    let timer = setTimeout(() => {
      setIsBusy(false)
      clearTimeout(timer)
    }, 333)

    return () => {
      clearTimeout(timer)
    }
  }, [actualPageIdx])

  const entriesOnSelectedPage = () => {
    const firstEntry = (actualPageIdx - 1) * elementsOnPage
    const lastEntry = firstEntry + elementsOnPage
    return dataEntries.slice(firstEntry, lastEntry)
  }

  const entries = entriesOnSelectedPage()

  const goToFirstPage = () => {
    setActualPageIdx(1)
  }

  const goToLastPage = () => {
    setActualPageIdx(lastPageIdx)
  }

  const goToPage = (page: number) => {
    setActualPageIdx(page)
  }

  const goToPrevPage = () => {
    setActualPageIdx((actualPageIdx) => (actualPageIdx === 1 ? actualPageIdx : actualPageIdx - 1))
  }

  const goToNextPage = () => {
    setActualPageIdx((actualPageIdx) =>
      actualPageIdx === lastPageIdx ? actualPageIdx : actualPageIdx + 1
    )
  }
  
  return [
    { 
      actualPageIdx, 
      lastPageIdx, 
      entries, 
      isBusy 
    },
    {
      goToFirstPage,
      goToPrevPage,
      goToPage,
      goToNextPage,
      goToLastPage,
    },
  ] 
}

Пагинация

interface PaginationProps {
  state: PaginationState<User>
  actions: PaginationActions
}

const Pagination: FC<PaginationProps> = ({ state, actions }) => {
  const pageNumbers = []

  for (let i = 1; i <= state.lastPageIdx; i++) {
    pageNumbers.push(i)
  }

  const renderPagination = pageNumbers.map((number) => (
    <button
      key={number}
      onClick={() => actions.goToPage(number)}
      className={
        state.actualPageIdx === number ? styles.actualIdxStyle : styles.paginationStyle
      }
    >
      {number}
    </button>
  ))

  return (
    <div className={styles.paginationContainer}>
      <button onClick={actions.goToFirstPage}>GO TO FIRST</button>
      <button onClick={actions.goToPrevPage} data-testid="goToPrevPage">
        <i className="fas fa-chevron-left"></i>
      </button>
      <div data-testid="goToPageButtons">{renderPagination}</div>
      <button onClick={actions.goToNextPage} data-testid="goToNextPage">
        <i className="fas fa-chevron-right"></i>
      </button>
      <button onClick={actions.goToLastPage}>GO TO LAST</button>
    </div>
  )
}

PaginatedTable

interface PaginatedTableProps {
  dataEntries: User[]
}

const PaginatedTable: FC<PaginatedTableProps> = ({ dataEntries }) => {
  const tableEntry = dataEntries && dataEntries.map(({ id, firstName, lastName }) => (
    <div key={id} className={styles.tableStyle}>
      <p>
        {id}{'. '}
      </p>
      <p>
        {firstName} {lastName}
      </p>
    </div>
  ))
  return (
    <div>
      <div className={`${styles.tableStyle} ${styles.headStyle}`}>
        <p>No.</p>
        <p>Name</p>
      </div>
      <div data-testid="users">{tableEntry}</div>
    </div>
  )
}

person karolina-szlenk    schedule 01.09.2020    source источник
comment
Воспользуйтесь кнопкой edit в своем связанном вопросе и скопируйте свой вопрос сюда с помощью этого вопроса edit кнопка :)   -  person cbr    schedule 01.09.2020
comment
Я очень ценю ваш совет!   -  person karolina-szlenk    schedule 01.09.2020
comment
связанный вопрос stackoverflow.com/questions/63615722/   -  person Akshay Vijay Jain    schedule 03.09.2020
comment
@AkshayVijayJain спасибо, но это не помогло.   -  person karolina-szlenk    schedule 03.09.2020
comment
@KarolinaSzlenk, хорошо   -  person Akshay Vijay Jain    schedule 03.09.2020
comment
@ karolina-szlenk, я предлагаю попробовать еще раз, но удалив ваши node_modules и package-lock.json, а затем снова npm i. У меня возникла та же проблема, и только после перехода на TypeScript 3 и nuking node_modules она разрешилась.   -  person radicand    schedule 04.10.2020
comment
@radic, и я забыл об этой проблеме, но я только что попробовал ваше предложение. Большое спасибо! Оно работает ;-)   -  person karolina-szlenk    schedule 04.10.2020


Ответы (1)


Могу подтвердить, что @radicand упомянул в комментариях выше. Следующие пакеты необходимо было понизить до этих версий:

"@typescript-eslint/eslint-plugin": "3.9.1",
"@typescript-eslint/parser": "3.9.1",
"typescript": "3.9.2"

Пакеты Typescript 4.x и eslint 4.x не работают со сценариями реакции на версии 3.4.3.

person DavidG    schedule 06.10.2020