reactjs - 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
解决方案
推荐阅读
- php - Smarty PHP - 带有斜线双引号的变量的 If 语句
- python - UnicodeDecodeError 使用 PIL 模块
- mysql - 将长字符串作为字段保存的 sql 良好做法
- java - 我的 for 循环只执行一次它的语句
- sql - 在 BigQuery SQL 中压缩表数组行
- r - 按周聚合/加入不同周长的数据(5 天 vs 7 天)
- c++ - CMake错误:在评估包含目录时找到相对路径
- python - 在python中使用子节点迭代GTK3 Treestore
- kubernetes - Kubernetes(在 GKE 上)通过特定 pod 的 NAT 进行外部连接
- sql-server - AFTER DELETE 触发器触发但不将记录插入审计表