Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript GraphQL查询后:属性';然后';不存在于类型';无效';_Javascript_Reactjs_Typescript_Graphql_React Apollo - Fatal编程技术网

Javascript GraphQL查询后:属性';然后';不存在于类型';无效';

Javascript GraphQL查询后:属性';然后';不存在于类型';无效';,javascript,reactjs,typescript,graphql,react-apollo,Javascript,Reactjs,Typescript,Graphql,React Apollo,我使用的graphql突变与.then&.catch完美结合: let submitForm = ( email: string, firstName: string ) => { setIsSubmitted(true); if (email && (firstName)) { const input: UpdateUserInput = {}; if (firstName) { input

我使用的graphql突变与.then&.catch完美结合:

  let submitForm = (
    email: string,
    firstName: string
  ) => {
    setIsSubmitted(true);

    if (email && (firstName)) {
      const input: UpdateUserInput = {};
      if (firstName) {
        input.firstName = firstName;
      }
      updateUser({
        variables: {
          email: email,
          input: input,
        },
      })
        .then(({ data }: ExecutionResult<UpdateUserResponse>) => {
          if (data !== null && data !== undefined) {
            setIsUpdated(true);
          }
        })
        .catch((error: { message: string }) => {
          console.log('Error msg:' + error.message);
        });
    }
  };
但是,我一直得到一个错误,即类型“void”上不存在
属性“then”

编辑:

没有.then、.catch,我的代码工作正常。完整形式是这样的:

function UserSearchPage() {
  const [criteria, setCriteria] = useState('');
  const [searchItem, setSearchItem] = useState('');

  const [loadUsers, { loading, data }] = useLazyQuery(LoadUsersQuery);

  function PrintUsers({ data }: any) {
    return (
      <div>
        {data &&
          data.users.nodes &&
          data.users.nodes.map((c: any, i: any) => (
            <li key={i}>
              Id: {c.id}, First Name: {c.firstName}, Last Name: {c.lastName},
              Email: {c.email}, phoneNumber: {c.phoneNumber}
            </li>
          ))}
      </div>
    );
  }

  let ShowUsers = () => {
    const where: WhereInput = {};
    if (criteria === '1') {
      loadUsers({
        variables: {
          where: where
        },
      });      
    }

    if (criteria === '2') {
      if (searchItem) {
        where.firstName_contains = searchItem;
        loadUsers({
          variables: {
            where: where
          },
        });
      }
    }
  };
  return (
.....);
}
我还可以如何访问数据属性/错误? 从console.log中,我知道返回的是:

Object

__typename: "User"

email: "first@first.com"

firstName: "First"

id: 148

lastName: "User"

phoneNumber: "+49123"

但是,如果我尝试访问,比如说
data.users.id
,为什么我会被未定义?如何修复此问题?

这取决于
loadUsers
中到底发生了什么,但很可能您忘记了返回语句


如果您更改
loadUsers
以返回它所加载的用户的承诺,那么您的代码应该可以很好地开始工作。

这取决于
loadUsers
中到底发生了什么,但很可能您忘记了返回语句

如果您更改
loadUsers
以返回它所加载的用户的承诺,那么您的代码应该可以很好地开始工作。

如果您查看
useLazyQuery
,它不会像
UseVariation
那样返回承诺,因此它们的行为不同

您必须使用调用
useLazyQuery
时返回的第二个参数(加载、数据),而不是依赖于承诺。这就是为什么在您的编辑中,您的代码在没有
的情况下工作。然后

如果您查看
useLazyQuery
,它不会返回
承诺
usemotation
,因此它们的行为不同


您必须使用调用
useLazyQuery
时返回的第二个参数(加载、数据),而不是依赖于承诺。这就是为什么在您的编辑中,您的代码在没有
的情况下工作。然后

如其他答案所述,这是已知的问题-

而不是

    loadUsers({
      variables: {
        where: where
      },
    })
    .then(({ data }: any) => {
      if (data !== null && data !== undefined) {
      }
    })
您可以使用
onCompleted
选项

const [loadUsers, { loading, data }] = useLazyQuery(LoadUsersQuery, {
  onCompleted: ( data : any ) => {
    if (data !== null && data !== undefined) {
      // some action
    }
  }
});

如其他答案所述,这是一个已知的问题-

而不是

    loadUsers({
      variables: {
        where: where
      },
    })
    .then(({ data }: any) => {
      if (data !== null && data !== undefined) {
      }
    })
您可以使用
onCompleted
选项

const [loadUsers, { loading, data }] = useLazyQuery(LoadUsersQuery, {
  onCompleted: ( data : any ) => {
    if (data !== null && data !== undefined) {
      // some action
    }
  }
});


where is
loadUsers
?问题更新@Wyckwhere is
loadUsers
?问题更新@WyckloadUsers是一个图形查询。我想我不需要回执,是吗?与第一个示例一样,updateUser()也是一个graphql变体,可以正常工作。你能看看我更新的qs,然后解释一下你的意思吗?这个答案绝对正确。op的例子中隐藏的是,
loadUsers
来自一个外部方法,
useLazyQuery
由Apollo提供。返回的方法没有返回承诺。那么,我如何访问错误消息呢?另外,例如,查询返回一个属性为
id
的对象,那么我如何访问该属性呢?在发生突变的情况下,我只需要执行
data.loadUsers.id
或其他操作,它会起作用,但在这种情况下不起作用。那么解决办法是什么呢@LMulveyLadusers是一个graphql查询。我想我不需要回执,是吗?与第一个示例一样,updateUser()也是一个graphql变体,可以正常工作。你能看看我更新的qs,然后解释一下你的意思吗?这个答案绝对正确。op的例子中隐藏的是,
loadUsers
来自一个外部方法,
useLazyQuery
由Apollo提供。返回的方法没有返回承诺。那么,我如何访问错误消息呢?另外,例如,查询返回一个属性为
id
的对象,那么我如何访问该属性呢?在发生突变的情况下,我只需要执行
data.loadUsers.id
或其他操作,它会起作用,但在这种情况下不起作用。那么解决办法是什么呢@LMulveyI尝试添加
{loading,data,error}
,但是如果我添加了
console.log('error:',error)在loadUsers查询结束后,我总是未定义。即使有错误。正确的使用方法是什么?我找不到任何相关的示例。我尝试添加
{loading,data,error}
,但是如果我添加了
console.log('error:',error)在loadUsers查询结束后,我总是未定义。即使有错误。正确的使用方法是什么?我找不到任何相关示例。由于我多次使用loadUsers查询(每次使用不同的参数),我不确定这是否可行。我尝试添加
{loading,data,error}
,但如果我添加
console.log('error:',error')在loadUsers查询结束后,我总是未定义。即使有错误。正确的使用方法是什么?我找不到任何相关的例子。你可以从多个地方用不同的变量调用变异-数据处理通常是相同的<如果
数据
正常,则可以不定义代码>加载
,但这并不能真正回答我的问题。那么,我还可以如何访问错误消息?另外,例如,查询返回一个属性为
id
的对象,那么我如何访问该属性呢?在发生突变的情况下,我只需要执行
data.loadUsers.id
或其他操作,它会起作用,但在这种情况下不起作用。那么解决方案是什么呢?
错误
在组件fn body中可用(就像您之前尝试的那样)。。。身份证件检查响应/console.log吗
data.id
?由于我多次使用loadUsers查询(每次都使用不同的参数),我不确定这是否可行。我尝试添加
{loading,data,error}
,但如果我使用
console.log('error:',error')在loadUsers查询结束后,我总是未定义。即使有错误。正确的使用方法是什么?我找不到任何相关的例子。你可以从多个地方用不同的变量调用变异-数据处理通常是相同的<如果
数据
正常,则可以不定义代码>加载
,但这并不能真正回答我的问题。我还能做什么