私のReact/Meteorアプリケーションでは、状態のデータを持つオブジェクトをサーバー上のメソッドに渡して、データベースに挿入しようとしています。しかし、ReactコンポーネントからMeteorメソッドにオブジェクトを渡す際に問題があるようです。子オブジェクトの1つはMeteorメソッドで終了しますが、すべての子プロセスは終了しています。私はそれがObject
であることを確認するために使用check()
除くオブジェクトに何もしない:Meteor.callに渡すときにオブジェクトのデータが見つかりません
'Appointments.saveData'(dataObj) {
check(dataObj, Object);
console.log(dataObj);
// ....
}
ここでフロントエンドに何が起こるかです:
Meteor.call('Appointments.saveData', {
vitalsData: this.state.vitalsData || {},
subjectiveData: this.state.subjectiveData || '',
physicalExamData: this.state.physicalExamData || {},
rosData: this.state.rosData || {},
impressionData: this.state.impressionData || [],
extraNotes: this.state.extraNotes || ''
}, (err, res) => {
if (res && !err) {
this.refs.toasts.success(
'Data for this encounter has been saved.',
'Records saved!'
);
} else {
this.refs.toasts.error(
'An unknown error has occurred. Reload the page and try again.',
'Error!'
);
}
});
私が使用してオブジェクトに私の状態変数のすべてを兼ね備えこの方法ではdataObj
となる。ただし、dataObj.impressionData
が存在し、オブジェクトを含む配列ですが、配列内のオブジェクトからデータが欠落しています。
たとえば、dataObj.impressionData[0].diagnosis
はオブジェクトである必要があります。実際には、データベースから既に取得されたオブジェクトの完全なコピーとみなされます。ただし、私がconsole.log
なら、オブジェクトは空です。
私は、Meteorメソッドに渡す前に各ステップでデータが存在することを確認しました。私console.log
Meteor.call
を呼び出す直前のオブジェクトと、私のメソッドでcheck
を呼び出した直後のオブジェクト。なぜ私の人生はデータが欠落しているのか理解できません。
私は何を忘れていますか?
編集:データがref
から直接状態に追加されるようにコードを変更しました。これで、サーバーメソッドはオブジェクトを適切に受け取ります。ただし、次のコードで:
meteor:PRIMARY> db.EncounterData.findOne()
...
"impression" : {
"patientId" : "47de32b428d8c4aaac284af3",
"appointmentId" : "TwL7DF9FoXPRgmrjR",
"fields" : [
{
"patientId" : "47de32b428d8c4aaac284af3",
"diagnosis" : {
}
}
]
},
...
は私が私を考える:
if (dataObj.impressionData && dataObj.impressionData.length > 0) {
dataObj.impressionData.forEach(obj => {
console.log(obj); // obj.diagnosis exists and is as expected
const x = ICD10Codes.findOne({ _id: obj.diagnosis._id });
console.log(x); // this also works as it should
impressionFields.push({ patientId: appt.patient._id, diagnosis: x, note: obj.note, x });
});
}
設定診断x
に、私はを知っストレートデータベースからオブジェクトの有効なコピーが、同じ結果が得られています狂ったよ。
'this'は実際にあなたのReactコンポーネントを指していますか?流星コードはどこで呼びますか? –
@MatthewHerbstはい - 私は実際には 'Meteor.call'の直前に' console.log(this.state.impressionData) 'というデータがあります。これはReactコンポーネント内の関数であり、 'save'ボタンが押され子コンポーネントからのデータが保存された後に呼び出されます。 – user3259354
私たちに機能と保存を教えてもらえますか?状態がまだ設定されていないため、問題が発生している可能性があります。これを覚えておいてください。setState'は**非同期**呼び出しです。したがって、呼び出しが完了したことを確認するためにライフサイクルメソッドを使用する必要があります。 –