Я не понял этого:
И фильтр может быть сделан с локальными (текущими) данными или на сервере.
В вашем примере вытолько делая фильтр на стороне клиента.
На мой взгляд, лучший вариант для вас - разделить код на два компонента.
import React, { Component } from 'react';
import { Query } from 'react-apollo';
import Filter from './Filter';
function MyComponent() {
render() {
const { query, variables } = this.props;
return (
<Query query={query} variables={variables}>
{({ loading, data, error }) => (
<Filter
{...this.props}
isLoading={loading}
data={data}
error={error}
/>
)}
</Query>
);
}
}
Компонент фильтра:
import AnotherComponent from './AnotherComponent';
filterData = () => {
// some sort of filtering. No issue with this.
}
class Filter extends Component {
state = {
searchTerm: '',
data
}
static getDerivedStateFromProps(props, state) {
return { data: filterData(props.data, state.searchTerm };
}
handleSearchTermChangeLocal = searchTerm => {
const data = filterData(this.state.data, searchTerm);
this.setState({ data, searchTerm });
}
render() {
return (
<AnotherComponent
{...this.props}
data={this.state.data}
onSearchTermChange={handleSearchTermChange}
/>
);
}
}
Я написал здесь код в переполнении стека напрямую, это проблемы с орфографией, и вы можете улучшить логику, моя идея здесь состояла в том, чтобы просто написать код, чтобы ответить на ваш вопрос