gpt4 book ai didi

javascript - react Apollo : Dynamically update GraphQL query from Component state

转载 作者:可可西里 更新时间:2023-11-01 02:06:09 24 4
gpt4 key购买 nike

我有一个组件,它使用 react-apollo 装饰器语法显示 GraphQL 查询的结果。查询接受一个参数,我想根据组件状态动态设置该参数。

考虑以下简化示例:

import * as React from ‘react’;
import { graphql } from ‘react-apollo’;
import gql from ‘graphql-tag’;

const myQuery = gql`
query($active: boolean!) {
items(active: $active) {

}
}
`;

@graphql(myQuery)
class MyQueryResultComponent extends React.Component {
public render() {
return <div>
<input type=“checkbox” /* other attributes and bindings */ />
{this.props.data.items}
<div>;
}
}

单击复选框时,我想重新提交查询,根据复选框的状态在 myQuery 中动态设置 active 属性。为简洁起见,我省略了复选框的处理程序和绑定(bind),但如何才能在状态更改时重新提交查询?

最佳答案

创建一个新组件,它将具有从父组件传递的 prop active

此过程在 react-apollo 文档的部分中有很好的解释: Computing from props

根据您的示例和您的要求,我制作了一个演示,该演示托管在 codesandbox 上并使用 GraphQL API。

演示:https://codesandbox.io/embed/PNnjBPmV2

Data.js

import React from 'react';
import PropTypes from 'prop-types';
import gql from 'graphql-tag';
import { graphql } from 'react-apollo';

const Data = ({ data }) =>
<div>
<h2>Data</h2>
<pre style={{ textAlign: 'left' }}>
{JSON.stringify(data, undefined, 2)}
</pre>
</div>;

Data.propTypes = {
active: PropTypes.bool.isRequired,
};

const query = gql`
query SearchAuthor($id: Int!) {
author(id: $id) {
id
firstName
lastName
}
}
`;

export default graphql(query, {
options(ownProps) {
return {
variables: {
// This is the place where you can
// access your component's props and provide
// variables for your query
id: ownProps.active ? 1 : 2,
},
};
},
})(Data);

App.js

import React, { Component } from 'react';
import Data from './Data';

class App extends Component {
constructor(props) {
super(props);

this.state = {
active: false,
};

this.handleChange = this.handleChange.bind(this);
}

handleChange() {
this.setState(prevState => ({
active: !prevState.active,
}));
}

render() {
const { active } = this.state;

return (
<div>
<h1>App</h1>
<div>
<label>
<input
type="checkbox"
checked={active}
onChange={this.handleChange}
/>
If selected, fetch author <strong>id: 1</strong>
</label>
</div>
<Data active={active} />
</div>
);
}
}

export default App;

关于javascript - react Apollo : Dynamically update GraphQL query from Component state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44808291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com