gpt4 book ai didi

javascript - 如何使用 Apollo 2 使用 GraphQL 查询中的数据预填写表单?

转载 作者:行者123 更新时间:2023-12-02 08:24:38 25 4
gpt4 key购买 nike

我很难将 Apollo 2 GraphQL 查询中的数据获取到常规表单字段中。

其他人是如何解决这个问题的?之前尝试过 Relay,并成功使用组件构造函数设置表单字段状态。

然而,在 Apollo 中,即使在搜索了几个小时并阅读了大量文档之后,我仍然一无所知......

在组件初始化期间,状态始终返回 null,因为 props 是在稍后阶段设置的。我尝试在加载后设置它,但这让我陷入了无限循环......

我完全迷失了:/

这就是我现在想出的……它有效。但这是满足此要求的推荐方法吗?

import React from 'react';

import { Route, Redirect, Switch } from "react-router-dom";

import { graphql } from 'react-apollo';
import gql from 'graphql-tag';

// SEMANTIC-UI REACT
import { Container, Form, Button, Loader, Message } from "semantic-ui-react";


const MY_QUERY = gql`
query {
erp(id:"RXJwTm9kZToy") {
id
name
code
}
}`;


class Test extends React.Component {

constructor(props) {
super(props)
this.state = {
}
}

componentWillReceiveProps(newProps) {
if (newProps !== this.props) {
this.setState({
erp_name: (newProps.data.erp || "").name,
erp_code: (newProps.data.erp || "").code
});
}
}

render() {
if (this.props.data.loading) {
return <Loader active inline='centered' />;
} else if (this.props.data.error) {
return <Message error content={this.props.data.error.message} />;
} else {
return (
<Form>
<ul>
<li key={this.props.data.erp.id}>{this.props.data.erp.name}</li>
</ul>
<Form.Input name="erp_name" label="ERP Name" placeholder="Name" value={this.state.erp_name} />
<Form.Input name="erp_code" label="ERP Code" placeholder="Code" value={this.state.erp_code} />
<Button type='submit'>Submit</Button>
</Form>
);
}
}
}

export default graphql(MY_QUERY)(Test);

最佳答案

这是一个使用 React 和 ReduxForm 的小示例。也许这会对您有所帮助。

在此示例中,查询将在组件初始化时执行,并将返回填写表单所需的数据。

希望对你有帮助!

import PropTypes from 'prop-types'
import React, { Component } from 'react'
import { compose } from 'recompose'
import { graphql, withApollo, gql } from 'react-apollo'
import { Form } from 'redux-form'

class MyExampleComponent extends Component {
render() {
const { userData } = this.props

return (
<Form
initialValues={userData}
/>
)
}
}

MyExampleComponent.propTypes = {
userData: PropTypes.object
}

const query = gql`
query getUser($userId: ID) {
user(id: $userId) {
age
firstName
lastName
}
}
`

export default compose(
withApollo,

graphql(query, {
props: ({ data }) => ({
isLoading: data.loading,
userData: data.user
}),
options: ({ params }) => ({
variables: { id: params.id }
})
})
)(MyExampleComponent)

关于javascript - 如何使用 Apollo 2 使用 GraphQL 查询中的数据预填写表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47854316/

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