2016-11-14 1 views
2

React/Relayアプリケーションには、一部のフィールドを変更するためのフォームがあります。新しい文字が入力に入力されるたびにサーバーの更新を送信したくありません。どのようにリレーを使用してアプリケーションの状態をサポートすることができますか?リレードキュメントのほとんどを読んでいると、基本的にリレーフォームを自分のフォームのローカルステートや他のFluxストアにコピーして、そこで変更してからRelayにコミットする必要があるようです。それは地方の状態を保つだけでは余分な仕事のようです。サーバーにプッシュしないでリレーストアを更新するには

+0

あなたがコンポーネントの状態を設定したり、再来のようなローカルストアを使用するかについては

。私が知る限り、あなたが説明している方法でリレーストアをローカルに更新することはできません。最近、同様のシナリオを経て、私は訂正されてうれしいです。個人的には、フォームになると、ローカルの状態を保持するだけでなく、ユーザーがページを更新したり、後で終了して状態になった場合でもローカルストレージを使用して終了するのが便利だと思いますあなたのユースケースはここにあります。 – alexi2

答えて

1

リレー現在のバージョンは、graphQLとReactの間の接着剤であり、サーバからのデータのみを処理します。


...私が問題を見ることができない

...私は基本的に私のフォームのローカル状態にリレー状態のいずれか をコピーする必要があることに私には思えます。 Reactの仕組みは、フォーム全体または入力ごとに別々にstateを格納する必要があります。

編集機能(フォームをレンダリングし、ユーザーが入力を入力するためにデータをフェッチする)を追加すると、すべてのリレーデータはフォームレベルでthis.props.RelayFragmentNameとして利用できます。

あなたはそれをstateに割り当てて、円が完成した入力に渡します。 propsから入力を直接入力することもできます(データを入力stateに割り当てずに)stateの形式を入力からの方法で変更することもできます。

ユーザーが変更を加えて確定すると、stateのすべてを再度収集して突然変異を作成するだけです。

すべてのデフォルトが設定されていれば、基本的には破壊されない完全な円です。


リレーはキャッシュを直接、取得、追加または更新する不可欠APIを持っていますが、それは(特にローカル状態のために)比較的汚れやめったに使われないのです。サーバーからクライアントへの更新をプッシュし、キャッシュを手動で更新するWebSocketなどの機能に使用されます。

現在のリレーは、サーバーデータのみで動作するように設計されています。リレー2はローカルキャッシュを持っていますが、まだアウトされていません。


さまざまなことについて話している場合や、コードサンプルを使用できる場合は、教えてください。

+0

お返事ありがとうございます。私は 'RelayFragmentName'の使い方を見てみたいと思いますが、前と同じように話していると思います。私はちょうど私がAPIを使用し、リレーで直接状態を変更したいと思うように思えます。これは、すべてを小道具として渡し、私のコンポーネントをステートレスにすることです。私はちょうど必ずしもすべてのリレー状態の変更がネットワーク要求をもたらすことを望まない。 –

1

現代のリレーでは、commitLocalUpdateを使用してリレーを行うことができます。例

onEmailChange = (email) => { 
    commitLocalUpdate(environment, (proxy) => { 
    const userProxy = proxy.get(this.props.user.__id); 
    userProxy.setValue(email, 'email'); 
    }); 
} 
+0

驚くばかり!私はレポの機能を参照してくださいが、それについてのドキュメントはありますか? –

+0

@MatthewHerbstいいえ、私は公式の文書でそれを見つけることができませんでしたが、これはあなたが入力変更時にこれらの変更を別のコンポーネントに反映させたい場合を除き、通常のコンポーネント状態を使用する必要があります... –

関連する問題