私が持っているもの
2つの機能-
getListInfo-ここでは、オブジェクトが存在するかどうかを確認しています。存在しない場合は、オブジェクトを作成してから返します。
getInitialState-reactnativeのデフォルト関数。
達成したいこと
getInitialStateからgetListInfoを呼び出して、最終的にリストビューに入力してみてください。
しかし、何が起こっているのか-
値objが返される前でも、ページ全体のコードが実行されています。したがって、問題は、リストビューがデータを未定義として取得していることです。
私が知っていること
問題を解決するためにpromiseを使用すること。しかし、正しい方法ではありません。
実際のコード-
getListInfo : function() {
AsyncStorage.getItem('listobject').then((obj) => {
if(obj == undefined)
{
var obj1 ={};
obj1.data ={};
obj1.data.isdirty = true;
console.log("obj1 = "+ JSON.stringify(obj1));
AsyncStorage.setItem('listobject',obj1);
obj = AsyncStorage.getItem('listobject');
console.log("obj = "+ JSON.stringify(obj));
}
if(obj.data.isdirty)
{
obj.data.isdirty = false;
AsyncStorage.setItem('listobject',JSON.stringify(obj));
return AsyncStorage.getItem('listobject');
}
}).done();
},
getInitialState: function() {
applistglobal = this.checkLocalStore();
var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
return {
dataSource: ds.cloneWithRows(this._genRows({})),
};
},
render: function() {
/* BLAH BLAH BLAH */
}
コードのpromise部分(getInitialState関数)-promiseを使用しましたが、関数呼び出しでさえ失敗しています。したがって、コードのこの部分を無視して、上記のコードを評価してください。
getInitialState: function() {
var promise = new Promise(function (resolve, reject) {
resolve(this.getListInfo());
});
promise.then((listobject) => {
console.log("getInitialState listobject "+listobject);
})
promise.catch((error) => {
console.log("ERROR"+error);
})
var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
return {
dataSource: ds.cloneWithRows(this._genRows({})),
};
},
設定方法は通常の方法ではありません。つまり、getInitialStateでリクエストを行います。promiseが完了すると、空の状態とsetStateを返します。componentWillMountまたはcomponentDidMountでリクエストを開始できます。react-nativeサイトでこの例https://facebook.github.io/react-native/docs/asyncstorage.htmlを参照してください。ただし、ES7非同期構造を使用しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加