createRefetchContainer does not update props
- Dominant language
- Rust
- Stars
- 19k
- Forks
- 1.9k
- PR merge metrics
- No merged PRs in 30d
Description
I have code like:
```import React, { Component } from 'react';
import { graphql } from 'react-relay';
import Foo from '../Foo';
import enviroment from '../enviroment';
const schemaQuery = graphql`query FooBetterQuery($filter: Filter, $pageInfo: PageInfo) {
foo(filter: $filter, pageInfo: $pageInfo) {
...Foo_foo @arguments(filter: $filter, pageInfo: $pageInfo)
}
}`;
export default class FooBetter extends Component {
renderQuery = ({ props, error }) => (
);
getVariables = () => ({
pageInfo: {
offset: 0,
count: 10,
},
})
render() {
return (
);
}
}
```
and for `Foo`:
```
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { DataGrid } from '@mui/x-data-grid';
import { createRefetchContainer, graphql } from 'react-relay';
export class Foo extends Component {
constructor(props) {
super(props);
this.state = {
isLoading: true,
data: [],
total: 0,
page: 1,
pageSize: 10,
};
}
componentDidUpdate(prevProps, prevState) {
const { foo } = this.props;
if (prevState.data !== foo.items
) {
this.setState((old) => ({
pageState: {
...old.pageState, isLoading: false, data: foo.items, total: 200,
},
}));
}
}
_loadMore(page) {
// Increments the number of stories being rendered by 10.
const { relay } = this.props;
const refetchVariables = () => ({
pageInfo: {
offset: (page - 1) * 10,
count: 10,
},
});
this.setState((old) => ({ pageState: { ...old.pageState, isLoading: true } }));
relay.refetch(refetchVariables, null, null, { force: true });
}
render() {
const { data } = this.state;
return (
{
this._loadMore(newPage + 1);
this.setState((old) => ({ pageState: { ...old.pageState, page: newPage + 1 } }));
}}
/>
);
}
}
Foo.propTypes = {
foo: PropTypes.object,
relay: PropTypes.object,
};
Foo.defaultProps = {
foo: {},
relay: {},
};
const schemaQuery = graphql`query FooQuery($filter: Filter, $pageInfo: PageInfo) {
foo(filter: $filter, pageInfo: $pageInfo) {
...Foo_foo @arguments(filter: $filter, pageInfo: $pageInfo)
}
}`;
export default createRefetchContainer(Foo,
{
foo: graphql`fragment Foo_foo on FooList
@argumentDefinitions(
filter: {type: "Filter"}
pageInfo: {type: "PageInfo"}
) {
items {
name
},
page {
offset
nextOffset
hasNextPage
}
}`,
},
schemaQuery);
```
When in `DataGrid` I click on the next page in DevTools I see correct request and response, but data in props does not change. What is the reason?
Contributor guide
Assessment
This issue has not been assessed yet.