Ошибка типа: arr.map не является функцией - PullRequest
0 голосов
/ 25 апреля 2020

Я работаю с reactjs и не могу предотвратить эту ошибку при попытке отобразить данные с сервера. мой топор ios file:

import axios from "axios";
import {BASE_URL} from "../config";

export const readLectures = () => {
    return axios
        .get(`${BASE_URL}/api/lectures/all`)
        .then(response => {
            return response.data;
        })
        .catch(error => {
            console.log(error);
        })

};

Итак, функция readLectures возвращает массив лекций. Как я должен написать функцию updateLecture corectle, чтобы wotk это хорошо. Как я должен передать данные с сервера в setLection ()? Пожалуйста, помогите мне. Большое спасибо.

import { readLectures } from '../../../api/lectures';
const StudentsViewing = (props) => {
  const [lection, setLection] = useState([]);

  const updateLecture = () => {
    readLectures(setLection({lection}))
    }

  useEffect(() => {
    updateLecture()
  }, [])

  const renderLectures = (arr) => {
    return arr.map((item, index) => {

      return (
        <CardItem item={item} />
      )
    })

  }

  const lectionCard = renderLectures(lection);

  const settings = {
    dots: false,
    infinite: false,
    speed: 900,
    slidesToShow: 4,
    slidesToScroll: 4
  };

  return (
      <Slider {...settings}>
        {lectionCard}
      </Slider>
  )
}

export default StudentsViewing;

1 Ответ

0 голосов
/ 25 апреля 2020

Функция readLectures возвращает обещание, поэтому вы можете получить ожидаемый array внутри обратного вызова then. См. Ниже:

const updateLecture = () => {
    readLectures().then(lection => setLection(lection))
}

Или используя синтаксис async/await:

const updateLecture = async () => {
    setLocation(await readLectures())
}
...