2016-04-30 9 views
0

私はこれのための名前、従ってタイトルを知らない。なぜこのような変数を割り当てるのですか?

私は基本的に(新しいエントリを作成する)のどちらかが(編集用)の小道具を経由して渡されたデータをロードしたり、空の構造体をロードすることによって、私のモーダルフォームを初期化:

defaultStruct: { 
    text: null, 
    active: true, 
    options: [ 
     { 
      text: null, 
      correct: true, 
      position: 0, 
      _destroy: false, 
     } 
    ] 
}, 
getInitialState() { 
    return { 
     question: this.props.initialQuestion == null ? this.defaultStruct : this.props.initialQuestion, 
    }; 
} 

主なアイデアは、使用してフォームをリセットすることですフォームを送信した後、再度このデフォルトを再構築してください。

私がconsole.log(this.defaultStruct)を送信した後、実際にフォームの状態のデータが入力されていることがわかりました。だから...一体何?

handleSubmit(e){ 
    if(e){e.preventDefault();} 
    $.ajax({ 
     url: this.state.question.id == null ? this.props.applicationData.routes.questionsCreate : this.props.applicationData.routes.questionsUpdate, 
     dataType: 'json', 
     contentType: 'application/json', 
     type: 'POST', 
     data: this.digestDataForStupidRails('question', 'options'), 
     success: function(data) { 
      console.log(this.defaultStruct) 
     }.bind(this), 
     error: function(xhr, status, err) { 

     }.bind(this) 
    }); 
} 

コンソール出力は:もちろん

{ 
    "question": { 
     "text": "preg 1", 
     "active": true, 
     "options": [ 
      { 
       "text": "preg 1 a 1", 
       "correct": false, 
       "position": 0, 
       "_destroy": false 
      }, 
      { 
       "text": "preg 1 a 2", 
       "correct": true, 
       "position": 1, 
       "_destroy": false 
      } 
     ] 
    } 
} 

私の代わりに関数を使用してこの問題を解決し、それが空のstructを毎回返すよう、しかしこれにもかかわらず、私は好奇心続けることができます。

誰でもこの現象を説明できますか?

答えて

2

これはReactに固有のものではなく、javascript(または基本的に類似の言語)の仕組みです。 defaultStructはオブジェクトなので、新しいコピーではなく、参照渡しされます。 getInitialStateを保存したい場合は、好きな答えに示唆されているものか、既にlodashunderscoreなどのこの機能があるライブラリを使用して、clone the objectにアクセスする必要があります。または、既にjqueryを使用しているため、$.extendを最初のリンクの2番目の答えとして使用できます。

+0

ああ、今私はjavascriptについてもっと知っている、ありがとう! –

関連する問題