Ошибка типа: устройство.устройства.карта не является функцией

#node.js #reactjs #typescript

Вопрос:

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

            const {device} = useContext(Context)

  91 | </div>
> 92 | <div className="inner-display-collection">
     | ^  93 |     {device.devices.map(device =>
  94 |         <CartGoods device={device}/>
  95 |     )}        
 

сам продукт:

    const CartGoodr = ({device}) => {
   const history = useHistory()
   return(
    <div className="inner-display-collection">
        <a key={device.id} href="" className="active-cart" onClick={() => history.push(DEVICE_ROUTE   '/'   device._id)} style={{textDecoration: 'none'}}>
            <div className="cart-good">
                <div className="wrapper-cart">
                    <img className="foto-cart" src="" alt="" />
                    <div className="display-info-cart">
                        <h3 className="text-price-cart" >{`${device.prise}₽`}</h3>
                    </div>
                    <div className="display-info-cart">
                        <h4 className="text-decription-cart">{device.descriptionMine}</h4> 
                    </div>  
                </div>
            </div>
        </a>
    </div>
   )
 }

  export default CartGoodr
 

то есть все должно получиться, но эта ошибка вылетает

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

1. Можете ли вы показать нам, как или где вы получаете данные об устройствах? Ошибка «карта не является функцией» означает, что вы вызываете функцию карты для объекта, не являющегося массивом. Например

Ответ №1:

Проблема в том, что ваш объект device.devices пуст. Это должен быть массив, чтобы иметь доступ к этой функции .map, потому что она доступна только в массивах.

Если вы попытаетесь консольно зарегистрировать device.devices непосредственно перед отображением элементов, вы увидите, что он выводит скорее неопределенное значение, нуль, число или строку вместо массива

 const {device} = useContext(Context)
console.log(device.devices) // here
 

Если эти данные извлекаются через запрос api, вы можете добавить свойство загрузки на устройство, установить его в значение true перед выполнением запроса API, а при извлечении данных установить значение false, а затем использовать его следующим образом:

 if(device.loading){
  return <p>Loading the device...</p>
}

// and here map through the device.devices or any other content of your component
 

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

1. «Проблема в том, что ваш объект device.devices пуст». — Это не «пусто». Если device.devices бы было null или undefined (другими словами «пусто»), сообщение об ошибке было бы другим: TypeError: device.devices is null/undefined или TypeError: Cannot read property 'map' of null/undefined . Ошибка OP говорит нам, что device.devices у этого есть какое-то значение, но это не массив.