首页 > 解决方案 > React Apollo 3 graphQL 理解重新渲染的机制

问题描述

我试图了解 Apollo 在更新查询时如何重新渲染(我们知道重新渲染是通过道具或状态更改发生的)
显然 Apollo 应该使用道具,但它确实不使用道具(如果没有通过 app.js 传递任何内容,则此函数中的道具始终返回 null)

我还创建了一个变量,当函数由 Apollo 运行时,它返回预期值的两倍,如下所示,我不明白为什么。
有趣的是,在日志中,第一个值是 1,正如预期的那样,然后在重新渲染中它变为 3 而不是 2,在渲染的段落中它显示为 4。

任何解释表示赞赏!

App.js 内部

import { ApolloProvider } from "@apollo/client";
import client from './Apollo/appolo'

function App() {
  return (
    <ApolloProvider client={client}>
      <MyComp/>
    </ApolloProvider>
  )
}

MyComp.js

import { someQuery } from '../Apollo/gql';
import { useQuery } from '@apollo/client';

let count=0;

console.log('here start and count=', count)

function MyComp(props) {
  const query=useQuery(someQuery)
  console.log('props=',props); // always returns null
  count++
  console.log('inside function count=', count);
  
  return (   
    <p>{count}</p>  // expected to be 2 ( once when loading is true and the other one when it is false) but it returns 4
  )
}

export default MyComp

标签: reactjsapollo-clientreact-functional-component

解决方案


推荐阅读