как пройти через массив переменных состояния реакции и определить, имеет ли оно одно истинное значение - PullRequest
1 голос
/ 11 октября 2019

У меня есть переменная состояния, подобная следующей

const Home = ({ t, i18n, history }) => {
  const [otherStudiosAvailable, setOtherStudiosAvailable] = useState([]);

  const studios = ["de", "fr", "pl", "en", "nl", "ru"];
  const otherStudios = studios.filter(item => {
    return item !== i18n.language;
  });

  useEffect(() => {
    let others = [];
    for (const studio of otherStudios) {
      checkForAvailableAgent(
        `sales_${studio}`,
        "Linktostudio",
        "serviceID"
      )
        .then(res => {
          others[studio] = res;
          setOtherStudiosAvailable(others);
        })
        .catch(error => {
          console.log("an error happened.");
        });
    }
   }, []);

}

{otherStudiosAvailable.indexOf(true) ? (

    <Button
      variant="success"
       onClick={e => callBtnClick("flag")}
    >
    Other studios available
    </Button>

    ) : ("")
   }

Мне нужно иметь условную проверку в JSX на основе otherStudiosAvailable, если она имеет хотя бы одно истинное значение

, любая помощь будетбыть оцененным.

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Я предлагаю это решение

    {otherStudiosAvailable.indexOf(true)!==-1 && (

    <Button
       variant="success"
      onClick={e => callBtnClick("flag")}
    >
    Other studios available
    </Button>

    )
}
0 голосов
/ 11 октября 2019

На самом деле IndeOf будет возвращать -1 в случае, если true не присутствует в массиве, но истинное значение -1 - true, следовательно, вам нужно явно проверить, не равно ли оно -1 (что указывает на наличие элемента) Object.values ​​(otherStudiosAvailable) возвращает массив значений, присутствующих в этом объекте

 {Object.values(otherStudiosAvailable).indexOf(true)!==-1 ? (

    <Button
       variant="success"
      onClick={e => callBtnClick("flag")}
    >
    Other studios available
    </Button>

    ) : ("")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...