javascript - 从函数调用 LazyQuery Hook

标签 javascript reactjs typescript graphql apollo

我正在使用这样的 graphql 查询:

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

如果我在代码中使用它,惰性查询 loadUsers 就会起作用并显示结果:

return (
    <div>
        <StyledSearchBar
          value={searchItem}
          onChange={value => {
            setSearchItem(value);
          }}
          onRequestSearch={() => loadUsers()}
        />
        {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>
  );
}

但是,如果我将 onRequestSearch={() => loadUsers()} 更改为 onRequestSearch={() => ShowUsers()}```` ,控制台会给我检查```但没有执行任何 graphql 查询,也没有显示结果。

function ShowUsers() {
    console.log('Check');
    loadUsers();
    {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>
      ))}

为什么会这样?

编辑:

这会运行突变,但不会加载用户。

onRequestSearch={() => ShowUsers()}
 function ShowUsers() {
    console.log('Checkk');
    loadUsers();
    return (
      <div>
        <Typography>Checking</Typography>
        {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>
    );
}

最佳答案

您无法从处理函数中返回 JSX,但是您可以将映射的 JSX 转换为组件并将 props 传递给它

const [loadUsers, { loading, data }] = useLazyQuery(LoadUsersQuery);
return (
    <div>
        <StyledSearchBar
          value={searchItem}
          onChange={value => {
            setSearchItem(value);
          }}
          onRequestSearch={() => loadUsers()}
        />
        <ShowUsers data={data}/>
      )
    </div>
  );
} 

function ShowUsers({data}) {
    console.log('Check');

    return 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>
      )
    )
}

关于javascript - 从函数调用 LazyQuery Hook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61305330/

相关文章:

typescript - 如何避免在 TS 三重斜杠指令中进行难看的导入

javascript - 为什么我在使用这个函数的时候会出现未定义的情况?

javascript - 使用 JavaScript 验证表单

javascript - 键/值对的 Javascript 数组在 C# 中的等效项是什么

javascript - 警告 : Expected server HTML to contain a matching nav in div

css - 滚动不显示整个元素列表

javascript - react 中的功能没有按预期工作

来自无类型对象的 Typescript 索引类型

Javascript 转换未按顺序执行

typescript - 有人能解释一下 '[P in keyof O]: O[P];'是什么意思吗?