如何通过函数调用函数clinet.query?
How can I call the function clinet.query through the function?
我想通过函数调用 client.query,但是它不起作用。例如,当用户单击一个按钮时,我想调用一个名为 handleClick 的函数来获取查询 下面是一个如何通过函数 client.query 调用
的示例
class DelayedQuery extends Component {
state = { dog: null };
onDogFetched = dog => this.setState(() => ({ dog }));
handleClick = (client) => { //<-------I call the function
async () => {
const { data } = await client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
this.onDogFetched(data.dog);
}
}
render() {
return (
<ApolloConsumer>
{client => (
<div>
{this.state.dog && <img src={this.state.dog.displayImage} />}
<button onClick={()=>this.handleClick(client) } > Click me! </button> // <-------I call handleClick
</div>
)}
</ApolloConsumer>
);
}
}
如何通过函数调用函数clinet.query?
所以你有两个问题。
1.您没有将客户端传递到您的函数中,因此在函数运行后这将是一个问题。这样做:
handleClick = client => {...}
2。您实际上并没有在 handleClick 中调用您的内部函数。您只需等待函数的生成。调用它后追加()调用它:
async () => {
const { data } = await client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
this.onDogFetched(data.dog);
}();
或者分开创建和执行:
async () => {
const fetch = client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
const { data } = await fetch();
this.onDogFetched(data.dog);
}
或者让点击异步:
handleClick = async client => {
const { data } = await client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
this.onDogFetched(data.dog);
}
希望这对您有所帮助。编码愉快。
我通过使 handleClick 异步来解决问题
class DelayedQuery extends Component {
state = { dog: null };
onDogFetched = dog => this.setState(() => ({ dog }));
handleClick = async (client) => {
const { data } = await client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
this.onDogFetched(data.dog);
}
render() {
return (
<ApolloConsumer>
{client => (
<div>
{this.state.dog && <img src={this.state.dog.displayImage} />}
<button onClick={()=>this.handleClick(client) } > Click me! </button>
</div>
)}
</ApolloConsumer>
);
}
}
我想通过函数调用 client.query,但是它不起作用。例如,当用户单击一个按钮时,我想调用一个名为 handleClick 的函数来获取查询 下面是一个如何通过函数 client.query 调用
的示例class DelayedQuery extends Component {
state = { dog: null };
onDogFetched = dog => this.setState(() => ({ dog }));
handleClick = (client) => { //<-------I call the function
async () => {
const { data } = await client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
this.onDogFetched(data.dog);
}
}
render() {
return (
<ApolloConsumer>
{client => (
<div>
{this.state.dog && <img src={this.state.dog.displayImage} />}
<button onClick={()=>this.handleClick(client) } > Click me! </button> // <-------I call handleClick
</div>
)}
</ApolloConsumer>
);
}
}
如何通过函数调用函数clinet.query?
所以你有两个问题。 1.您没有将客户端传递到您的函数中,因此在函数运行后这将是一个问题。这样做:
handleClick = client => {...}
2。您实际上并没有在 handleClick 中调用您的内部函数。您只需等待函数的生成。调用它后追加()调用它:
async () => {
const { data } = await client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
this.onDogFetched(data.dog);
}();
或者分开创建和执行:
async () => {
const fetch = client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
const { data } = await fetch();
this.onDogFetched(data.dog);
}
或者让点击异步:
handleClick = async client => {
const { data } = await client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
this.onDogFetched(data.dog);
}
希望这对您有所帮助。编码愉快。
我通过使 handleClick 异步来解决问题
class DelayedQuery extends Component {
state = { dog: null };
onDogFetched = dog => this.setState(() => ({ dog }));
handleClick = async (client) => {
const { data } = await client.query({
query: GET_DOG_PHOTO,
variables: { breed: "bulldog" }
});
this.onDogFetched(data.dog);
}
render() {
return (
<ApolloConsumer>
{client => (
<div>
{this.state.dog && <img src={this.state.dog.displayImage} />}
<button onClick={()=>this.handleClick(client) } > Click me! </button>
</div>
)}
</ApolloConsumer>
);
}
}