将新的Date()。toISOString()传递给<query variables =“”>时,组件无限重新渲染

时间:2019-02-15 05:03:49

标签: reactjs graphql react-apollo prisma

编辑:

如果我用这样的硬编码字符串替换变量:

<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;

我在上面的代码中做错了吗?

0 个答案:

没有答案