Мое приложение выглядит примерно так, как показано во фрагментах ниже.
(я упустил много деталей реализации в надежде, что приведенного ниже кода достаточно, чтобы ответить на мой вопрос).
SampleApp.js
const SampleAppQuery = graphql`
list SampleAppQuery {
...ItemComponent_item
}
`
function SampleApp() {
return (
<QueryRenderer
environment={environment}
query={SampleAppQuery}
render={(error, props) => {
if (props) {
return <AppRefetchContainer list={props} />
}
}}
/>
)
}
AppRefetchContainer.js
class AppRefetchContainer extends Component {
render() {
<div>
<HeaderComponent refetchList={this._refetchList} />
{list.map(item => <ItemComponent item={item} />)}
</div>
}
_refetchList(params) {
this.props.relay.refetch(params)
}
}
export default createRefetchContainer(
AppRefetchContainer,
graphql`
fragment AppRefetchContainer_list on Item {
...ItemComponent_item
}
`,
graphql`
query AppRefetchContainerQuery($sortBy: String!)
list SampleAppQuery(sortBy: $sortBy) {
...ItemComponent_item
}
`
)
Начальная загрузка приложения в порядке.Нажатие на один из заголовков должно инициировать повторное получение, чтобы данные списка могли быть отсортированы по переданным параметрам.Когда я запускаю повторное получение, сервер отвечает правильными данными, однако , компонент не перерисовывается.
Я подозреваю, что моя проблема связана с тем, как я здесь определил фрагменты,Ошибка консоли при начальной загрузке страницы:
RelayModernSelector: Expected object to contain data for fragment
`AppRefetchContainer_list`, got `{"list":[{"__fragments":
{"ItemComponent_item":{}},"__id":"[some_valid_id]","__fragmentOwner":null},{...
Вопрос (ы):
Я не совсем уверен, как интерпретировать эту ошибку.Это причина, по которой я не могу перерисовать интерфейс?
Я знаю, что этот подход может быть не идеальным, но как я могу refetch
из компонента, который не обязательнофрагмент запроса?
С удовольствием предоставим любые разъяснения или пропущенный контекст:)