2016-11-14 109 views
2

我在我的React/Relay應用程序中使用了一個表單來修改某些字段。每次輸入新的字母時,我都不想發送服務器更新。我如何使用Relay來支持應用程序狀態,而無需一直推送到服務器?在閱讀了大部分的Relay文檔之後,我認爲必須將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不,我無法在他們的官方文檔中找到它,雖然這會起作用,但應該使用正常的組件狀態,除非希望這些更改在輸入更改時反映到另一個組件中。 –

相關問題