2017-02-20 11 views
1

私は誕生日を追跡しており、ユーザーが入力すると状態を変更する必要がありますが、ユーザーが状態を上書きするときに誕生日配列の新しいインスタンスが作成されるという問題があります。誕生日インデックスの状態をどのように変更するか、つまり月の位置0を入力すると、日付の位置1が変更され、年の位置3が変更されます。私の状態の中で配列を突然変異させるには?

this.state = { 
    dob : ["", "", ""] 
}; 



onInputChange(event) { 
    const type = event.target.name; 
    var dob = ["", "", ""]; 
    if(type == "month") { 
     birthday[0] = event.target.value; 
     this.setState({ dob }); 
    } else if(type == "date") { 
     birthday[1] = event.target.value; 
     this.setState({ dob }); 
    } else if(type == "year"){ 
     birthday[2] = event.target.value; 
     this.setState({ dob }); 
    } 
    } 

答えて

1

理由は、その状態からDOBの値をコピーして、特定の値を更新するのではなく、あなたがDOBの新しいインスタンスを作成し、その新しくarray作成したことにより、状態の値を交換する任意の値のonchangeです、およびarrayバック状態に、このようにそれを書くことを置く:

this.state = { 
    dob : ["", "", ""] 
}; 

onInputChange(event) { 
    const type = event.target.name; 
    var dob = this.state.dob.slice(); 
    if(type == "month") { 
     dob[0] = event.target.value; 
    } else if(type == "date") { 
     dob[1] = event.target.value; 
    } else if(type == "year"){ 
     dob[2] = event.target.value; 
    } 
    this.setState({ dob }); 
} 

作業fiddleを確認してください:https://jsfiddle.net/drffr0ww/

+0

これは動作しません。これは何が起こるのですかhttps://puu.sh/uc7tq/e8646eab30.png – joethemow

+0

は私の答えを更新しました。 –

関連する問題