React(Redux付き)とParseを使って簡単なTodoアプリケーションを構築しています。私はオブジェクトの非同期読み込みを理解することに重大な問題があります。Parse.com非同期読み込みエラーのReactjs?オブジェクトにアクセスできない
ケース#1:
var todos = this.props.todos;
console.log(todos) // I see [{TodoClass} {TodoClass}]
console.log(todos[0]) // I see {id: "xyz123", content: "hello world"}
ケース#2:
var todos = this.props.todos;
console.log(todos) // I see []
console.log(todos[0]) // undefined
console.log(todos[0].id) // error; can't access id
強調 - サーバ上のドスは人口です。私は空の配列にアクセスしようとしていませんが、アクセス.id
を追加することで、todos配列が空になります。
私は立ち往生しています。私は "id"にアクセスしようとするとロードの変化のシーケンスが疑わしいですが、それを修正する方法はわかりません。修正を提案してください。どんな助けでも大歓迎です。
TodoClass.js:
function TodoClass(id, content) {
this.id = id;
this.content = content;
}
export default TodoClass
解析クエリ()約束を見つける使用することにより、私は解析DBの各「行」、およびストアへのデータのための私のTodoClassインスタンス内のデータとストアをマップ。私はReduxビューアが正しく更新されるのを見る。
これは、私はそれをロードする場所TodoList.jsxです:最初のスニップはエラーではなく、二番目があるん
var TodoList = React.createClass({
render: function() {
var todos = this.props.todos; <-- Array of TodoClass instances
var renderData =() => {
console.log(todos)
console.log(todos[0])
//console.log(todos[0].id) <-- Gives me issues.
var elements = [];
for (var i = 1; i< 5; i++) {
elements.push(<BrowseItem key={i} todo={todos[i]}/>)
};
return elements;
};
return (
<div > {renderData()} </div>
);
}
});
export default connect((state) => {return state})(TodoList);
基本的に、私は最後の行を「コメントアウト」場合 'コンソール:
あなた
render
機能は、おそらく「ロード」/「いいえドス」ここにプレースホルダを任意のトドスがあるかどうかを確認し、返す必要があります。 log(todos [0] .id) 'これで、ケース1で見たものすべてが同じものとして見えます。 dbデータの何も変更されていないので、私は3つの解析要素を持っています。私は空の配列にアクセスしようとしていません。何らかの形で '.id'がアクセスしようとすると、配列は空になります。 'console.log()'の3行目は最初と2番目の行に影響します。 – jbroコンポーネントを初めてレンダリングするときに非同期にロードすると、空の配列が表示され、ロードされたtodosでのみ更新されることに注意してください。それは何とか "空"にならず、最初の実行では常に空です。 2番目のスニペットはエラーをスローし、配列が移入されると更新されません。 –
ご清聴ありがとうございます。はい、それは私が解決しようとしている問題です。これは非同期に実行されています。この問題を回避する方法が分かっている場合は、お勧めします。 – jbro