如果我用这样的硬编码字符串替换变量:
<Query
query={CLASSES_QUERY}
variables={{ startsAt_gte: "2019-01-11T11:11:11.111Z" }}
>
一切正常。
向<Query />
提供variables
到startsAt_gte Prisma字段时,包含new Date().toISOString()
的组件将继续重新渲染。
首先,这根本没有发生。然后几天前,刚刚停止工作(开始无限重新渲染)。
移动new Date().toISOString()
来自<Query variables={..} />
组件
解决了一个组件的React类组件中的constructor()
函数。
但是问题仍然存在: (可能也在其他地方)
import React from 'react';
import gql from 'graphql-tag';
import { Query } from 'react-apollo';
import Loading from 'loading';
import Error from 'error';
const CLASSES_QUERY = gql`
query CLASSES_QUERY($startsAt_gte: DateTime) {
classes(where: { active: true }) {
id
}
sessions(where: { startsAt_gte: $startsAt_gte }) {
id
startsAt
}
}
}
`;
class ClassList extends React.Component {
constructor(props) {
super(props);
this.state = {
startsAt_gte: new Date().toISOString()
};
}
render() {
const { startsAt_gte } = this.state;
return (
<>
<Query
query={CLASSES_QUERY}
variables={{ startsAt_gte: startsAt_gte }}
>
{({ data, loading, error }) => {
if (loading) return <Loading />;
if (error) return <Error />;
return (
<div>
<div>
{data.classes.map(cls => {
return (
<div>
<h2>{cls.title}</h2>
{cls.sessions.map(ses => {
return <div>{ses.startsAt}</div>;
})}
</div>
);
})}
</div>
</div>
);
}}
</Query>
</>
);
}
}
export default ClassList;
我在上面的代码中做错了吗?