#reactjs #graphql
#reactjs #graphql
Вопрос:
Я ищу хороший способ обновить часть «OrderBy: createdAt_ASC» приведенного ниже запроса graphql при нажатии одной из двух кнопок ниже.
Порядок по умолчанию — createAt_ASC, и пользователь должен иметь возможность переключаться между ними.
const ALL_ITEMS_QUERY = gql`
query ALL_ITEMS_QUERY {
items(orderBy: createdAt_ASC) {
id
title
description
image
}
}
`;
Кнопки:
<button onClick={sortNew}>Newest</button>
<button onClick={sortOld}>Oldest</button>
Комментарии:
1. Используете ли вы клиент apollo, redux form или redux?
2. Переменные GraphQL почти наверняка будут частью ответа, но, не зная, как вы выполняете вызов GraphQL, трудно сказать вам, как это подключить.
Ответ №1:
Прежде всего, измените свой запрос
const ALL_ITEMS_QUERY = gql`
query ALL_ITEMS_QUERY($orderBy: String!) {
items(orderBy: $orderBy) {
id
title
description
image
}
}
`;
В компоненте react используйте react-apollo
import { compose, graphql } from 'react-apollo'
class ReactComponentName extends Component {
......
//Inside render return this buttons
<button onClick={this.changeOrder.bind(this,"sortNew")}>Newest</button>
<button onClick={this.changeOrder.bind(this,"sortOld")}>Oldest</button>
.......
// And change your export statement and using HOC
export default compose(
graphql(ALL_ITEMS_QUERY, { name: 'allItemQuery' }),
// import query and bind this into props using compose
)(ReactComponentName)
onClick вызов функции
async changeOrder(order) {
const { allItemQuery } = this.props
const result = await allItemQuery({ variables: { 'orderBy': order } })
//Set state or store filter data
}
Измените переменную состояния или отобразите данные результата.
Или
Сделайте этот классный компонент запроса в клиенте Apollo