我的React / Relay应用程序中有一个表单用于修改某些字段。每次在输入中输入新的字母时,我都不想发送服务器更新。如何在不总是推送到服务器的情况下使用Relay来支持应用程序状态?在阅读了大多数Relay文档之后,在我看来,我必须将Relay状态基本复制到我的表单的本地状态或其他一些Flux存储,处理在那里更改它,然后将其提交到Relay。为了保持当地的状态,这似乎是一项额外的工作。
答案 0 :(得分:1)
中继当前版本是graphQL和React之间的粘合剂,它只处理来自服务器的数据。
......在我看来,我必须基本上复制中继状态 到我的形式的当地状态...
我没有看到问题。 React的工作方式,要求您分别为整个表单或每个输入存储state
。
如果添加编辑功能(渲染表单和获取数据以填充输入以供用户更改),则无论如何,所有中继数据都可在表单级别上以this.props.RelayFragmentName
的形式获得。
您将其传递给输入,并将其指定给state
并完成圆圈。您也可以直接从props
提供输入(不将数据分配给输入state
),并通过方法从输入更改表单state
。
现在,当用户进行更改并确认更改时,您只需再次收集所有state
即可进行更改。
我认为它是一个完整的圆圈,如果设置了所有默认值,它基本上是牢不可破的。
Relay 有命令式API直接获取,添加或更新缓存,但它相对较脏且很少使用(特别是对于本地状态)。它用于WebSockets等功能,您可以在其中将更新从服务器推送到客户端并手动更新缓存。
Current Relay仅适用于服务器数据。中继2有一个本地缓存,但还没有。
如果我们正在讨论不同的事情,或者你可以使用一些代码示例,请告诉我。
答案 1 :(得分:1)
在现代接力中,你可以使用commitLocalUpdate
来做到这一点。
例如
onEmailChange = (email) => {
commitLocalUpdate(environment, (proxy) => {
const userProxy = proxy.get(this.props.user.__id);
userProxy.setValue(email, 'email');
});
}