Как сформировать троичную на 3 с 1 константой - PullRequest
0 голосов
/ 20 марта 2019

Редактирование в полном сценарии : у меня есть два компонента и четыре кнопки! Значением по умолчанию для трех кнопок является null. Допустим, a , b , c , d - это четыре различных кнопки.

  • В первом компоненте кнопка a & b будет по умолчанию null, поэтому кнопка d будет отключена.
  • когда пользователь нажимает a & b , значение будет присвоено a & b , поэтому после a & b назначено, тогда d должно быть включено.

  • во втором компоненте, кнопка a & c будет иметь значение по умолчанию null, и когда они оба получат значение onPressing, снова кнопка d будет включено.

Обратите внимание, что компоненты отображаются условно, поэтому для глаз пользователя будет виден только один компонент!

Вот мой код:

 <Button
     disabled={(this.state.quantityItemSelected === null || 
     this.state.deliveryOptionSelected === null) && 
     (this.state.timeSlotItemSelected === null) ? true : false} 
 />

Константа по умолчанию this.state.quantityItemSelected === null, которая одинакова для обоих.

Он отлично работает с условием в (), но примерно с первым, когда this.state.quantityItemSelected сначала не становится null, а затем this.state.timeSlotItemSelected становится не null, он отлично работает,

но когда я переворачиваю это, когда this.state.timeSlotItemSelected сначала не становится нулевым, условия переходят в ложное состояние.

Моя ожидаемая работа, это должно быть правдой, когда любая вещь null с константой.

Пожалуйста, помогите с этим, дайте мне знать, что еще нужно понять

Ответы [ 4 ]

1 голос
/ 20 марта 2019

Если у меня есть a, b, c, когда a = null и b = null, тогда это должно быть true, а когда a = null и c = null, это должно быть true, остальные условия false.

Попробуйте ниже, это будет работать!Вы можете использовать это.

(this.state.quantityItemSelected === null || this.state.deliveryOptionSelected === 
 null) && (this.state.timeSlotItemSelected === null || this.state.quantityItemSelected 
=== null) ? true : false

Дайте мне знать, если это работает!

0 голосов
/ 20 марта 2019

Например, если у меня есть a, b, c, когда a = null и b = null, тогда это должно быть true, а когда a = null и c = null, это должно быть true, остальные условия ложные.

То, что вы (в псевдологической нотации) - это (!a && !b && c) || (!a && b && !c), что расшифровывается как

function calculateConditions(a, b, c) {
  return (a === null && b === null && c !== null) || (a === null && b !== null && c === null);
}

//T - true, F - False. Shortenned to keep the formatting
const table = [
  ["FFF", calculateConditions( null     ,  null     ,  null)],
  ["FFT", calculateConditions( null     ,  null     , "not null")],
  ["FTF", calculateConditions( null     , "not null",  null)],
  ["FTT", calculateConditions( null     , "not null", "not null")],
  ["TFF", calculateConditions("not null",  null     ,  null)],
  ["TFT", calculateConditions("not null",  null     , "not null")],
  ["TTF", calculateConditions("not null", "not null",  null)],
  ["TTT", calculateConditions("not null", "not null", "not null")],
]

for (const [key, value] of table) {
  console.log(key, value)
}
0 голосов
/ 20 марта 2019

Предполагая, что this.state.quantityItemSelected - это a, this.state.deliveryOptionSelected - b, а this.state.timeSlotItemSelected - c, условие должно быть:

this.state.quantityItemSelected === null && 
(this.state.deliveryOptionSelected === null ||
this.state.timeSlotItemSelected === null) ? true : false

или с a, b и c

a === null && (b === null || c === null)  ? true : false

Если значения Falsey, такие как ноль, пустые строки и т. Д., Не являются допустимыми значениями для a, b и c, вы можете улучшить код, выполнив:

disable = !a && (!b || !c)

Ответ на отредактированный вопрос

В первом компоненте кнопка a & b по умолчанию будет иметь значение null, поэтому кнопка d будет отключена.когда пользователь нажимает на a & b, значение a & b назначается, поэтому после назначения a & b следует включить d.

Это сценарий, отличный от предыдущего.

disableButtonD = a === null && b === null;  

или лучше

disableButtonD = !(a && b);  

И для:

во втором компоненте кнопка a & c будет иметь значение по умолчанию, равное нулю икогда они оба получили значение onPressing, снова будет включена кнопка d.

disableButtonD = a === null && C === null;  

или лучше

disableButtonD = !(a && C);  

Следуя ограничениям, вы не можете использовать одно предложение в обоих случаях,Конечно, в зависимости от того, какую платформу вы используете, у вас может быть функция.

Угловой пример:

Компонент:

disableD(firstValue, secondValue) {
  return !(firstValue && secondValue)
} 

HTML

<!-- first Button -->
<button [disabled]="disableD(a, b)"></button>

<!-- second button-->
<button [disabled]="disableD(a, c)"></button>
0 голосов
/ 20 марта 2019

Например, если у меня есть a, b, c, когда a = null и b = null, тогда это должно быть true, а когда a = null и c = null, это должно быть true, остальные условия ложные.

Вам необходимо заключить в скобки последние два условия и использовать для них ||.

 <Button
   disabled={(
     (this.state.quantityItemSelected === null) &&
     (this.state.deliveryOptionSelected === null || this.state.timeSlotItemSelected === null)
   ) ? true : false} 
 />
...