У меня возникли трудности с получением данных из запроса Apollo 2 GraphQL в обычные поля формы.
Как к этому относятся другие? Ранее пробовал Relay и успешно устанавливал состояние полей формы с помощью конструктора компонентов.
Однако в Apollo, даже после часов поиска и чтения тонны документации, я все еще в неведении...
Во время инициализации компонента состояние всегда возвращает null, так как свойства устанавливаются на более позднем этапе. Я пытался установить его после загрузки, но это приводит к бесконечному циклу...
я совсем запуталась :/
Это то, что я сейчас придумал ... это работает. Но является ли это рекомендуемым способом выполнения этого требования?
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);