#reactjs #react-hooks #conditional-operator #classname
#reactjs #реагирующие крючки #условный оператор #имя_класса
Вопрос:
У меня есть это условие className={errors.firstName ? "invalid" : "valid"}
Но мне нужно, чтобы по умолчанию использовалась пустая строка, если ни одно из этих условий не выполнено.
Я изо всех сил пытаюсь придумать, как подойти к этому, был бы признателен за совет, поскольку я не смог найти никаких ресурсов.
Мне придется вызывать это несколько раз для других полей текстовой области, поэтому я знаю, что мне нужно сделать это повторно.
Комментарии:
1. Теперь у вас есть два статуса,
true
илиfalse
. Итак, у вас должен быть начальный статус likeinitialStatus
, и тогда вы сможете достичь того, чего хотите, вот так:className={(errors.firstName === 'initialStatus')?"":(errors.firstName)? "invalid":"valid"}
2. Если мой комментарий непонятен, скажите мне, можете ли вы
initialStatus
это сделать или нет. так что я могу сделать для вас фрагмент3. Хорошо, итак, я создал переменную
intialState
и установил для нее значениеfalse
, я также попытался установить для нее пустую строку, но она по-прежнему устанавливает стиль по умолчаниюvalid
, а неinitialState
4. Нет, Вы не поняли, что я имел в виду. послушайте, просто укажите начальное значение для
errors.firstName
calledinitialStatus
, а затем используйте условие, которое я опубликовал. Короче говоря, вам нужно иметь три статуса дляerrors.firstName
. Вы можете сделать это любым доступным вам способом. И я сказал первое, что пришло мне в голову. (теперь у вас есть два статусаtrue
иfalse
. вам нужно три. просто создайте еще одно)
Ответ №1:
Вы могли бы использовать https://www.npmjs.com/package/classnames для этого.
className={classNames({ invalid: errors.firstName === true }, { valid: errors.firstName === false })
Так что, если errors.FirstName = true
тогда className будет invalid
. Если errors.FirstName = false
тогда так и будет valid
. Если errors.FirstName равно undefined
className, это будет пустая строка.
Ответ №2:
Давайте представим, что ваша ошибка FirstName изначально не существует или инициализируется с помощью null в объекте errors.
const errors = { firstName: null } // or not having firstName
Затем проверьте наличие ошибки firsName (которая может иметь тип string, например, сообщение об ошибке FirstName или любое логическое значение).
<Component
className={
// if you explicitly set it to null use strict in-equality here
errors.firstName != null ? "" : errors.firstName ? "invalid" : "valid"
}
/>;
вы также можете запретить установку пустой строки по умолчанию, вызвать ее по умолчанию 🙂
<Component
{...(errors.firstName != null amp;amp; {
className: errors.firstName ? "invalid" : "valid",
})}
/>;