【发布时间】:2020-03-23 19:18:30
【问题描述】:
我对 graphQL 和 Apollo 还很陌生。我希望我能说清楚:
我正在使用 apollo/react-hook useQuery 获取数据。之后我用数据填充一个表单,以便客户端可以更改它。完成后,数据会使用useMutation 发送回服务器。
到目前为止,我使用onCompleted 将获取的数据存储在组件状态中。看起来像这样:
import React, { useState } from 'react';
import { TextField } from '@material-ui/core';
const Index = () => {
const [state, setState] = useState(null)
const {data, loading, error} = useQuery<typeof queryType>(query, {
onCompleted: data => {
// modify data slightly
setState(data)
}
})
return (
<TextField value={state} onChange={() => setState(event.target.value)}/>
)
}
表单使用存储在组件状态中的值,表单处理程序使用setState
改变它。
我现在的问题是,这是否是最佳做法以及是否需要将获取的数据存储在本地组件状态中。
【问题讨论】:
-
您的代码对我来说看起来不错。这是必要的,因为起初
state为空。如果您不setState,您将无法更新视图,因此您的表单不会被更新。 -
我确实需要一个本地状态,还是使用 apollos 本地状态也会触发重新渲染?在实际应用中,我有几个下拉菜单。
-
对不起,我不熟悉阿波罗。但是既然你说 apollos 已经有相同数据的状态,你不应该创建自己的状态。对于一组数据,您应该只有一个状态。如果 apollos 处理状态,那么对你有好处!
-
好吧,我用一个大大的问号说了出来。我认为它不像功能组件状态(?)。
-
Apollo 公开的
data属性是代表远程数据的全局状态。虽然有办法改变它,但在用户表单的上下文中这样做是没有意义的。即使它是基于其他状态初始化的,表单的状态也只代表用户的输入。如果我们只是渲染数据,那么使用组件状态将是多余的。但这里不是这样。
标签: reactjs graphql react-apollo