【发布时间】:2019-11-25 18:22:02
【问题描述】:
我需要使用轮询来使用 GraphQL 查询数据。但是反应组件应该只在数据发生变化时重新渲染。每次有新数据进入时,如何防止组件重新渲染?以下代码不会阻止重新渲染。
const Instructions: React.FC<RouteComponentProps<RouteParams>> = props => {
const [firstTimeDataRender, setFirstTimeDataRender] = useState(true);
const [instructionData, setInstructionData] = useState<FetchSettlementInstructionsQuery_instructions[]>([]);
const { data, loading, error } = useQuery<FetchSettlementInstructionsQuery, FetchSettlementInstructionsQueryVariables>(
settlementInstructionsQuery,
{
variables: {
sort: null,
filter: { type: SettlementInstructionType.freeOfPayment },
},
fetchPolicy: 'cache-and-network',
pollInterval: 5000,
},
);
if (!!data && firstTimeDataRender) {
setFirstTimeDataRender(false);
setInstructionData(data.instructions);
}
const showLoading = loading && !(!!data && data.members) && firstTimeDataRender;
if (data && data.instructions !== instructionData) {
setInstructionData(data.instructions);
}
return (
<LayoutContent>
<Instructions data={instructionData} loading={showLoading} error={error ? true : false} />
</LayoutContent>
);
};
【问题讨论】:
-
应该和加载有关。你能显示
组件吗?
标签: reactjs graphql react-apollo