React Hook array первое значение пусто - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь сохранить массив, который я извлекаю из api, и сохраняю его в useState(['']), при этом моя первая запись внутри моего массива пуста.

Это выглядит так: (3) ["", "5ea5d29230778c1cd47e02dd", "5ea5d2f430778c1cd47e02de"]

Фактические данные, которые я получаю от своего топора ios, называем его так (2) ["5ea5d29230778c1cd47e02dd", "5ea5d2f430778c1cd47e02de"]

Я называю это и устанавливаю так:

  const [favorites, setFavorites] = useState(['']);

  const getIds = async () => {
    const { data } = await axios.get('/api/favIds');
    setFavorites(favorites => [...favorites, ...data.favorites]);
  }

  useEffect(() => {
    getIds();
  }, []);

Изменить

Я использую машинописный текст

ЕСЛИ я настроил его так:

const [favorites, setFavorites] = useState([]);

Я получаю эту ошибку:

> Argument of type '(favorites: never[]) => any[]' is not assignable to
> parameter of type 'SetStateAction<never[]>'.   Type '(favorites:
> never[]) => any[]' is not assignable to type '(prevState: never[]) =>
> never[]'.
>     Type 'any[]' is not assignable to type 'never[]'.
>       Type 'any' is not assignable to type 'never'.ts(2345)

Ответы [ 4 ]

2 голосов
/ 07 мая 2020

Определите его тип следующим образом:

  const [favorites, setFavorites] = useState<string[]>([]);


  setFavorites(() => [...data.favorites])
1 голос
/ 07 мая 2020

Вам необходимо определить тип useState как string[]

const [favorites, setFavorites] = useState<string[]>([]);

  const getIds = async () => {
    const { data } = await axios.get('/api/favIds');
    setFavorites(favorites => [...favorites, ...data.favorites]);
  }

  useEffect(() => {
    getIds();
  }, []);

Пример демонстрации

0 голосов
/ 07 мая 2020

Вы хотите сохранить это пустое строковое значение или нет?

Если вы этого не сделаете, вам не нужно включать то, что было в состоянии раньше, когда вы добавляете данные, полученные с помощью ax ios:

setFavorites(() => [...data.favorites])
0 голосов
/ 07 мая 2020

Первый элемент - это ваше состояние по умолчанию здесь: useState(['']). Вы инициализировали его пустой строкой в ​​качестве значения и передаете его в новое состояние в кодовом блоке [...favorites, ...data.favorites].

Измените объявление состояния инициализации на useState([])

...