【发布时间】:2020-06-29 08:22:01
【问题描述】:
我正在努力理解如何最好地组织我的代码以在 React 中设置初始 useState(),同时使用 GraphQL 和 Apollo 来引入数据。这是我的代码。如您所见,我想查看“数据”的一部分来设置初始状态,但是当我将 setSTate 移动到加载和错误行下方时,出现以下错误:
有条件地调用 React Hook “useState”。在每个组件渲染中,必须以完全相同的顺序调用 React Hooks。您是否在提前返回后不小心调用了 React Hook?反应钩子/钩子规则
我应该如何更好地组织这个?我是否必须使用 Apollo 的状态管理库,因为我更喜欢使用 React useState hooks。
const GET_LATEST_POSTS = gql`
query {
"graphql query is in here"
}
...
const Slider = () => {
const { data, loading, error } = useQuery(GET_LATEST_POSTS)
if (loading) return 'Loading...'
if (error) return `Error! ${error.message}`
const [ currentMovie, setMovie ] = useState(data)
}
【问题讨论】:
-
如果您需要使用数据来初始化状态,请使用
useEffect,正如答案中已经指出的那样。但是,仅当且仅当您打算稍后更改状态时,才应该像这样创建单独的组件状态。例如,如果您使用来自 Apollo 的数据来填充用户随后将编辑的表单。如果不是这种情况不是,那么您就不需要useState——直接使用data即可。
标签: reactjs graphql apollo react-apollo