2016-08-29 7 views
1

私のユーザーはURLを提供しています。そのURLをReact + Reduxアプリの<canvas>要素のバックグラウンドとして使用したいとします。これは、Reactコンポーネントのrender()メソッドが、ユーザーの画像を含む<img> DOMノードにアクセスする必要があることを意味します。イメージタグのsrc属性を設定することは、非同期です。なぜなら、要求されたイメージは、データがサーバーからフェッチされるまでDOMに実際には格納されないからです。Redux - 非同期に派生した非直列化可能オブジェクトへのアクセス方法

通常、非同期タスクでは、非同期タスクの結果を直接Reduxストアに格納しますが、Redux docsを読み取ると、非直列化可能オブジェクト(DOMノードなど)が格納されているように見えます)店舗にはアドバイスされていません。

この問題を解決する他の合理的な方法はありますか?現時点では、Reactコンポーネントのライフサイクルメソッドを悪用して、URL小道具が変更されるのを監視し、<img> DOMノードを非同期的にコンポーネントの状態に設定しています。

+0

したがって、ユーザーはURLを入力してBLOBを保存しますか?あなたはどのように背景を設定していますか? – martriay

+0

@martriayユーザーが提供するイメージをキャンバスに描画したいと思います。 https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImageの使用 –

+0

"blob"の意味がわかりません。わかりやすくするため、私は ''ノードを私に長期間利用可能にしたいので、常にユーザのURLをバックグラウンドとして使用して、小道具の変更として ''を再描画することができます。 –

答えて

0

画像URLを店舗/州に保存してImage constructorに渡すのはなぜですか?

render() { 
    var bg = new Image() 
    bg.src = this.state.url 
    // here you use the bg as an <img> element 
} 

あなたがコールバックとしてではなく、状態変化への反応として、それを設定しないでください。この方法を:あなたはstateurlを持っていると仮定すると

+0

残念ながら、 "load"イベントが発生するまで、確実に 'bg'を使用することはできません。すぐに使用しようとすると、画像がまだダウンロードされていないので、まだ空になります。より多くの文脈のためにこの答えを見てください:http://stackoverflow.com/a/16006223/1263117 –

+1

あなたは正しいです。私はストアにDOM要素を格納して、isReady変数などを観察してイメージが読み込まれるまで待つ以外の方法はないと思います。 – martriay

関連する問題