Согласно вашим журналам, похоже, что faqs
- это объект, содержащий массив с именем faqs
.
Возможно, это ошибка, и вы хотите передать массив напрямую вместо объекта, содержащего массив.
<MyComp faqs={[...]} />
Если это так, const { faqs } = this.props
даст вам массив, и ваш код будет работать.
Однако, если вы передадите данные как <MyComp faqs={{ faqs: [...] }} />
, то вы сможете получить доступ к внутреннему массиву с помощью присваивания, например:
const { faqs: { faqs } } = this.props;
Это исправит ошибки, которые возникают при .length
возврате undefined
и .map is not a function
.
Тогда вы продолжите в том же духе, сначала проверив, является ли faqs
правдивым, прежде чем позвонить .length
или .map
:
const questionList = faqs && faqs.length ? faqs.map(faq => { ...
Обратите внимание, что вы также можете назначить значения по умолчанию в назначении деструктурирования, чтобы массив всегда был правильно определен и достоверен, что исключает загрязнение кода проверками &&
везде:
const { faqs: { faqs = [] } = {} } = this.props;
Тогда вы можете напрямую получить доступ к .length
и .map
:
const questionList = faqs.length ? faqs.map(faq => {
return <div key={faq._id}>
<p className='mb-0'>Question: {faq.question}</p>
<p className='mb-0'>Answer: {faq.answer}</p>
</div>
}) : <div> no questions found.</div>