私は、javascript/jquery関数を使用してデータベースからデータを取得し、初期レンダリングの前にウェブサイトの既存のフィールドに値を設定しようとしています。私の理解は、初期レンダリングの前に状態を準備するためにComponentWillMountを呼び出さなければならないということです。以下は、私が求めていたものと似ている、この質問と回答を見て、私はreact.jsの非同期実行タイミングがわからない
componentWillMount:function()
{
var currentPage = location.hash;
getform(globalObj["#login"]["sessionId"], globalObj["#encsearch"]["ID"], formType, function(err, data)
{
console.log("Start form")
var info = data["FormData"];
console.log("End form");
});
console.log("Start Outside")
this.setState({"fieldValuePairs": info});
console.log(this.state.fieldValuePairs);
console.log("End Outside")
}
},
render: function() {
console.log("Rendered first before FormData");
return(
<div className="twelve columns">
<PageBuilder handleChange={this.handleChange}
pageName= {this.props.currentPage}
layoutConfig={this.state.layout}
initDataObj={this.state.fieldValuePairs}
rowClasses="row"/>
</div>
);
}
});
function getForm(sessionId, ID, formType, done) {
$.getJSON('/api/los/loans/loan/forms/get_form/', {"sessionId": sessionId, "Id": ID, "formType": formType})
.done(function(data) {
done(null, data);
}).fail(function(err) {
done(err, null);
}).always(function() {
;
});
}
を持っているもののサンプル、 React fetch data in server before render ですが、大きな違いは、私が呼び出しからのデータを待っていますということですデータベースに戻ってきてください。 Javascriptはデータが戻ってくるのを待たないので、データが取得されて状態が更新される前に初期レンダリングが行われます。私はgetformエリア内でthis.state.fieldValuePairsを呼び出すこともできません。私はそれが機能の範囲にないためだと思います。以下は、コンソールログの実行順序です。
Start Outside
End Outside
Render first before FormData
Start Form
End Form
質問:初期レンダリングの前にデータを取得するにはどうすればよいですか?それは機能が実行にあまりにも多くの時間を取っているためですか?var info = data["FormData"]
;
再び呼び出されるのですか?それは私が聞いたことのないものですが、私はその "記号"を使うことができません。私は自分の問題を処理するために初期状態を調整しました。 – LampPost
申し訳ありません私はそれがes6だった反応だったので、前提を作った。その場合、私の元のコードがうまくいったでしょう。しかし、あなたのコードを見て、それは私が将来の参照のために更新されたes5です – adrianj98