2017-09-14 95 views
2

我有兩個checkbox<form><form>有一個onChange={this.checkBoxOnChange}分配給它,它激發了checkBoxOnChange(event){..}功能的每一個變化的形式。我想映射(日誌)的狀態(即他們是否被檢查)。所以,我最初的價值爲false,因爲它們沒有被檢查,然後在我試圖改變的每個事件分別值(即如果虛假&反之亦然)三元運算符(內聯,如果沒有其他)

在以下this SO後我嘗試這樣做:

(event.target.value=='BILLDED') && billed=(!billed)  

通過這樣做,我得到:

Syntax error: Invalid left-hand side in assignment expression

然後我嘗試這樣做:

(event.target.value=='BILLDED') ? (billed=(!billed)) : null   

但是,它給了我BILLED:trueonChange(當點擊BILLED checkbox
這是複選框代碼內渲染方法:

render() { 
    return (
     <div> 
     <form onChange={this.checkBoxOnChange}> 
     <input type="checkbox" name="invoicestatus" value="BILLDED" />BILLDED<br /> 
     <input type="checkbox" name="invoicestatus" value="PENDING" />PENDING<br /> 
     </form> 
     <ListData data={this.state.data}/> 
    </div> 
    ); 
    } 

這是同一類(組件)中的checkBoxOnChange()功能:

checkBoxOnChange(event){ 
    var billed=false; 
    var pending=false; 
    // (event.target.value=='BILLDED') ? (billed=(!billed)) : null; 
    (event.target.value=='BILLDED') && billed=(!billed) 
    // (event.target.value=='PENDING') ? pending=(!pending) : null; 
    console.log("BILLDED:"+billed+" PENDING:"+pending); 
    } 
  • 有什麼不好的代碼?
  • 對於這種情況,我不能使用內聯語句嗎?
  • 有沒有更好的,更簡潔的方法?

回答

3

What's wrong with the code?

您初始化事件處理程序內billed變量false,這就是爲什麼你總是得到true而不是切換的狀態。

Can I not use inline statement for this scenario?

你可以,你只要把括號在正確的地方:

(event.target.value == 'BILLDED') && (billed = !billed); 
//         ^

Is there any better, more concise approach?

使用普通if聲明。它既是短,更具可讀性:

if (event.target.value == 'BILLDED') billed = !billed; 
+0

明白了。你能告訴我,那麼它會成爲初始化它們的理想地點嗎?在''構造函數''內部的'this.state()'內可能呢?由於React中沒有提供全局變量 – BlackBeard

+0

是的,使它成爲國家的一部分聽起來像是個好主意。當然,這也取決於你想要除了記錄它以外的值。 – Bergi

1

However, it gives me BILLED:true on every onChange (when clicked on BILLED checkbox)

這是不是因爲你使用局部變量如下

var billed=false; 

總是開始爲false

+0

是的,但它不應該改變每個點擊事件? – BlackBeard

+0

@NiladriSekharBasu從您發佈的代碼沒有。爲什麼呢? (它會改變,但改變不會持續正確?因爲這是一個局部變量)。 –

+0

好的。有我的錯誤。但是,那麼應該在哪裏宣佈呢?在'this.state()'也許?由於React沒有提供類變量.. – BlackBeard