Мне нужна помощь в использовании нового компонента запросов и мутаций в Apollo 2.1, особенно с несколькими запросами и мутациями.
У меня следующие проблемы:


По моему мнению,
props, и выполнить этот запрос.Чтобы использовать более одной мутации и запросов, вы можете использовать compose следующим образом
...
@compose(
graphql(GET_FEEDS_QUERY, {name : 'getFeeds'}),
graphql(CREATE_NEW_POST, {name: "createNewPost"}),
graphql(LIKE_POST_MUTATION, { name: "unlikePostMutation"}),
...
)
class HomeScreen extends Component {
...
}
изменить 2019/08/24 с Аполлона документы:
The new hooks API for Apollo Client is a simpler way to fetch data in your React app without the boilerplate of render prop components and higher-order components (HOC). We recommend using hooks for all new Apollo code going forward.
оригинальный ответ: Вы должны их вить. См. Этот пример:
const NumbersWithData = () => (
<Query query = {QueryOne}>
{({ loading: loadingOne, data: { one } }) => (
<Query query = {QueryTwo}>
{({ loading: loadingTwo, data: { two }}) => {
if (loadingOne || loadingTwo) return <span>loading...</span>
return <h3>{one} is less than {two}</h3>
}}
</Query>
)}
</Query>
);
Чтобы упростить управление вложением, вы можете проверить реагировать-усыновлять. У них есть пример приложения Apollo ToDo, в котором они сочетают запрос и несколько мутаций.
Мне не очень нравится идея гнездования. Что, если у меня есть панель с 20 мутациями?
Тогда вы не разработчик React и вам следует разбить все на несколько компонентов.
@JamieHutber - сильное заявление, но я согласен в принципе. Если у вас есть один компонент, необходимый для выполнения нескольких запросов / мутаций, вероятно, это запах кода, и вам следует по возможности разбить свое приложение на несколько отдельных компонентов.
Я просто перечитал это, у меня там получилось довольно тяжело ... Интересно, почему. lol Но да, я тоже согласен с этим в целом.
Ссылка в первом предложении мертва. Кто-нибудь знает, где это задокументировано? Изменилось ли что-нибудь из этого с апреля 2018 года?
@ox, страницу я тоже не нашел, поэтому удалил ссылку.
Я написал Средний пост о том, как объединить мутацию и запрос в одном компоненте. Вот отрывок из сообщения
// other import
import {Query} from “Apollo-graphql”; // new Query Component
import gql from "graphql-tag";
import { graphql } from "react-apollo";
import UserComponent from '../component/UserComponent'; // any component to display query result
const GET_ALL_USER = gql`
{
allUsers: {
firstname,
lastname,
username,
# other information
}
}
`
const UPDATE_USER_STATUS = gql`
mutation UpdateUserStatus($userID: ID!, $status: Int!){
updateUserState(userID: $userID, status: $status){
firstname,
lastname
username
# other information
}
}
`
ExampleComponent extends React.Component{
onEditInformation = async (user) => {
const response = await mutate({
variables: {userID: user}
})
}
render(){
return(
<Query query = {GET_ALL_USER}>
{({data: { allUsers }}) => {
return allusers.map(user => {
return (
<UserComponent
user = {user}
onEdit = {() => this.onEditInformation(user)}
/>
)
})
}}
</Query>
)
}
}
export default graphql(UPDATE_USER_STATUS)(ExampleComponent);
Для этого react-apollo экспортирует функцию compose. Используя эту функцию, вы можете одновременно использовать сразу несколько усилителей компонентов. Включая несколько расширений graphql () или даже Redux connect ().
import { Mutation, compose, graphql } from "react-apollo";
class AddTweet extends Component {
....
....
....
}
export default compose(
graphql(GET_AUTHORS, { name: "getAuthors" }),
graphql(ADD_TWEET, { name: "addTweet" }),
connect(...), // incase you are using Redux
)(AddTweet);
Важное замечание: compose() сначала выполняет последний энхансер и прокладывает себе путь назад по списку энхансеров.
Еще одна вещь: вы использовали this.props.data, теперь вы получите undefined. просто console.info(this.props), и вы увидите, что сейчас происходит с реквизитом. Теперь у вас будет два свойства: getAuthors и addTweet. Итак, теперь это будет this.props.name-in-compose.name-of-type-in-typeDefs, то есть this.props.getAuthors.getUsers. Мне потребовалось немного времени, чтобы понять это.
Могу я спросить, где в этом примере используется Mutation?
Очень плохо использовать Redux с apollo.
Помимо использования compose из react-apollo, вы можете попробовать еще одну отличную библиотеку утилит - реагировать-усыновлять. Отличная небольшая служебная библиотека, которая помогает вам составлять компоненты типа несколькоrender props, чтобы у вас не было вложенных шаблонов ада.
Я написал аналогичный ответ, который в основном покрывает все ваши текущие потребности с точки зрения:
Вот подробный ответ, который вы ищете и, надеюсь, может помочь в решении ваших проблем :)
@brunodahora, если вы все еще ищете решение для react-adopt, проверить это здесь :)
export default graphql(addBookMutation)(graphql(getAuthorsQuery)(AddBook))
Вы можете сослаться на это
@brunodahora, круто - если вы считаете, что это ответ на ваш вопрос, пожалуйста, не забудьте нажать на кнопку "Принять"