Получение этой ошибки, несмотря на то, что данные подтвердили существование в предыдущей строке! шляпа, я пропал без вести? Ошибка типа: Не удается прочитать свойство «включает» неопределенного

#javascript #reactjs

Вопрос:

Вот такой сценарий.. Я запрашиваю базу данных и заполняю массив, полный объектов. В данном случае объектами являются предметы. Я создаю фильтр на основе категорий. Цель состоит в том, чтобы запустить массив объектов через фильтр, который проверяет соответствие категории. Строка 45-48 пытается создать этот фильтр. Я объявляю переменную, устанавливаю ее равной результату, возвращаемому методом фильтра. Однако при выполнении метода includes я получаю сообщение об ошибке «Не удается прочитать свойство includes неопределенного». Ясно, как мы видим в консоли, мой массив объектов печатается из строки непосредственно перед фильтром, и объект явно содержит поле категорий, содержащее массив. Какого черта я не понимаю? Данные подтверждения выходят из консоли.войдите в код

 function RenderFilteredList(props) {
console.log(props.allPosts);
let filteredPosts = props.allPosts.filter((post, index) =>
  post.categories.includes(props.category)
);

return (
  <div className="posts-grid">
    {filteredPosts amp;amp;
      filteredPosts.map((post, index) => (
        <div className="grid-post-card" key={post.slug.current}>
          <Link to={"/"   post.slug.current}>
            <img
              className="grid-image"
              src={urlFor(post.featuredImage).width().url()}
              alt=""
            />
            <p className="grid-post-title">{post.title}</p>
            <p className="grid-post-author">
              {post.name   " - "   post.date}
            </p>
          </Link>
        </div>
      ))}
  </div>
);
 

}

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

1. allPosts это не то же самое, props.addPosts что …

2. allPosts — это государство. Я перепробовал этот 1 миллион способов, передавая его через реквизит, а не через реквизит. Каждый раз, когда я все еще сталкиваюсь с этой проблемой. Я просто удалил ссылку на реквизит из всего, что находится внутри функции рендеринга, и все равно получаю ошибку. Также только что подтверждено ведение журнала props.allPosts приводит к одному и тому же выводу в консоли.

3. Он выходит из строя на последнем элементе в массиве allPosts — похоже, у него нет элемента «категории».

Ответ №1:

На вашем скриншоте консоли categories для четвертого элемента не отображается allPosts .

Поскольку ошибка может возникнуть , если какой-либо элемент allPosts отсутствует categories , вы подтвердили, присутствует ли он во всех элементах?

Возможно, вам потребуется изменить свою filter функцию, чтобы проверить наличие categories поля и исключить элементы, в которых его нет.

Ответ №2:

у вас есть опечатка, вы регистрируетесь allPosts , но получаете доступ к реквизитам.allPosts

 let filteredPosts = allPosts.filter((post, index) =>
  post.categories.includes(props.category)
);

 

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

1. Я исправил код для регистрации реквизитов.все сообщения должны быть согласованными, и я получаю тот же вывод на консоли и ту же ошибку.

Ответ №3:

Похоже, что четвертый элемент в реквизите.allPosts может не содержать массива категорий. Можете ли вы проверить, что каждое сообщение в allPosts содержит массив категорий?

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

1. Да, это был виновник. Спасибо, что поймали его. Я очень благодарна!