1. В скобки внеси условие))
в подобных случаях в js/ts удобнее пользоваться null (хотя в тут концептуально уместнее ситуация, когда typeof onClick === 'undefined', что не достигается никаким присваиванием) можно попробовать через spread оператор, который позволит получить чистый лаконичный код ...(multipleLoginAttempts ? { onClick: openWindowAuth } : {}) а ругалось, вероятно, на пустые кавычки (вместо которых в onClick должна быть передана функция обработчика)
Вкусно
на здоровье! )
в первом случае атрибут onClick задаётся только в случае, когда определён multipleLoginAttempts (это вторая часть тернарника) [[кстати, тут требуется уточнение относительно использования multipleLoginAttempts или !multipleLoginAttempts]] если же multipleLoginAttempts не определён, то и onClick не определён (это третья часть тернарника) в остальных Вами приведённых примерах onClick оказывается всегда определён (вне зависимости от multipleLoginAttempts и желаемого поведения) но значения, туда переданные, различаются: во втором случае, в onClick приходит тело функции, в котором openWindowAuth никогда не сработает, как функция — её вызова не происходит. тут логичнее была бы такая запись onClick={() => !multipleLoginAttempts ? openWindowAuth() : (() => {})()} или ещё чуть лаконичнее onClick={() => (!multipleLoginAttempts ? openWindowAuth : () => {})()} в третьем случае скобки не нужны но тут намного важнее обратить внимание на то, что если первая часть условного выражения будет false, то и в атрибут onClick будет записан false, что не является функцией т.к. при попытке его вызвать [false()] ничего полезного не произойдёт этот кусок тоже можно исправить, привести к такому решению: onClick={!multipleLoginAttempts ? openWindowAuth : () => {}} минус обоих решений 2 и 3 — в необходимости передачи пустой функции
Обсуждают сегодня