Повторный рендеринг страницы, когда элемент в двумерном массиве изменяется в реагирующей нативной экспозиции - PullRequest
0 голосов
/ 23 марта 2020

Я хочу перезапустить приведенный ниже код, чтобы перезагрузить страницу всякий раз, когда значение в приглашении изменяется [1] [1], я обновляю эти значения массива с помощью AsyncStorage на другой странице, когда я попробовал следующее, я получил ошибка ниже. Есть ли другой способ сделать это?

const [invitation, setInvitation] = React.useState(Array.from({length: 2},()=> Array.from({length: 2})));

  React.useEffect(()=>
  {
     getUserId();

  },invitation[1][1]);

    async function getUserId() {
      var keys = ["invitationFromURL","Alert"]
      try {
        await AsyncStorage.multiGet(keys , (err, item) => 
        {
          setInvitation(item);
        });
      } catch (error) {
        // Error retrieving data
        console.log(error.message);
      }
    }  


  console.log(invitation);
  console.log(invitation[1][1]);

Ошибка, которую я получаю Предупреждение:% s получил последний аргумент во время этого рендеринга, но не во время предыдущего рендеринга. Несмотря на то, что последний аргумент является необязательным, его тип не может изменяться между визуализациями.% S, useEffect

1 Ответ

0 голосов
/ 23 марта 2020

Я предполагаю, что у вас есть что-то вроде

const [invitation, setInvitation] = useState([[], []]);

вверху вашего компонента. Это означает, что при первом запуске useEffect invitation[1][1] будет нулевым. На втором запуске это будет иметь значение. Это не кошерно в React Native. Когда вы вызываете useEffect, последний аргумент должен иметь одинаковый тип каждый раз, когда компонент рендерит.

Должно быть простым исправлением - вместо

useEffect(() => {
    getUserId();
  }, invitation[1][1]);

сделать

useEffect(() => {
    getUserId();
  }, invitation);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...