#javascript #reactjs
Вопрос:
В этом разделе кода, который является частью полного кода, который я опубликовал внизу,
{
this.props.program.application_required ||
this.state.isEnableWaitlist ||
this.isFree() ? ( <
button type = "button"
onClick = { _ => this.manualPayment() }
style={{
padding: "10px",
display: "block",
marginLeft: "auto",
marginBottom: 0
}}>
{
this.props.program.application_required ||
this.state.isEnableWaitlist ?
"Submit Application" :
"Confirm Order"
} </button>
)
Я хочу отделиться this.state.isEnableWaitlist
от двух других this.props.program.application_required
amp; this.isFree()
внутри одного и того же оператора if, чтобы, если this.state.isEnableWaitlist
у него будет своя собственная функция onClick, прежде чем он попадет во вторую часть оператора false, которая начинается с
: (<>
<p style = {{
padding: "20px",
fontFamily: "Open Sans, sans-serif"
}}.
Каков наилучший способ сделать это в троичном операторе?
Ниже приведен полный код
{
this.props.program.application_required ||
this.state.isEnableWaitlist ||
this.props.program.manual_invoices ||
this.isFree() ? (<> {
this.props.program.application_required ||
this.state.isEnableWaitlist ||
this.isFree() ? ( <
button type = "button"
onClick = { _ => this.manualPayment() }
style = {{
padding: "10px",
display: "block",
marginLeft: "auto",
marginBottom: 0
}} >
{
this.props.program.application_required ||
this.state.isEnableWaitlist ?
"Submit Application" :
"Confirm Order"
} </button>
) : ( <>
<p style = {{
padding: "20px",
fontFamily: "Open Sans, sans-serif"
}} >
<b> {
this.props.organization
} </b> opted to collect
payments manually.After confirming your order {
" "
} <b> {
this.props.organization
} </b> will contact you to
discuss next steps amp; payment options. </p>
<
button type = "button"
onClick = { _ => this.manualPayment() }
style = {{
padding: "10px",
display: "block",
marginLeft: "auto",
marginBottom: 0
}} >
Confirm Order </button> </>
)
} </>
)
Комментарии:
1. Также вы можете разделить условия с помощью
()
,(x1 || x2) amp;amp; (x3 || x4)
2. С моей точки зрения, троичные операторы должны быть моментальными снимками из условия true или false. Чтобы улучшить обслуживание и читаемость вашего кода, почему бы не создать метод, который содержит все те условия, которые вы хотите протестировать и использовать в троичном условии? Я думаю, вы добавите больше смысла в свой код и порадуете следующего разработчика, читая этот код. Вы всегда можете добавить все, что хотите, к троичному условию, но вы также можете быть более склонны к ошибкам.
Ответ №1:
Ложные значения
[0, "", '', false, null, undefined]
Троичный
condition ? yes : no;
condition
? 1
: condition2
? 1
: 0
Логические И
12 amp;amp; "hello" amp;amp; null amp;amp; undefined // return first falsy value
Логическое ИЛИ
12 || "hello" || null || undefined // return first truthy value
Нулевое слияние
0 ?? "hello" // 0
false ?? "hello" // false
Логическое присваивание с нулевым значением
// Normal
let x = null;
if (x === null || x === undefined) {
x = 12;
}
// Advanced
let x = null;
x ??= 12;
Логическое ИЛИ присваивание
// Normal
let x = false;
if (!x) {
x = 12;
}
// Advanced
let x = false;
x ||= 12;
Логическое И присваивание
// Normal
let x = "Truthy value";
if (x) {
x = 12;
}
// Advanced
let x = "Truthy value";
x amp;amp;= 12;
Комментарии:
1. Смотрите Персидские доки: ditty.ir/posts/js-conditional-operators/XoM25