У меня есть компонент, который получает и выводит информацию о событиях (this.state.event) из БД (в таблицу). Есть также что-то вроде фильтров. Фильтрация может быть по типу события и по участнику.
При нажатии кнопки на onClick вызывается handleShowClick(). В этой функции я проверяю: если значение типа события не равно null, я получаю из событий базы данных с этим типом. Если значение типа события равно null, я получаю все события.
После этого я проверяю значение участника (из состояния). Если значение не null, я вызываю функцию, в которой выполняется поиск, в какие события входит этот участник. Данные из this.state.event отображаются в таблице в другом компоненте.
У меня возникли проблемы с участником. Когда я выбираю одного из участников, таблица показывает верные данные на долю секунды. После этого происходит возврат в предыдущее состояние this.state.event (без фильтра по участникам).
Как это исправить? Я устанавливаю состояние для this.state.event только в этом компоненте
class TestPage extends Component {
  constructor(props) {
    super(props);
    this.state = {
      event: [],
      searchByType: null,
      searchByParticipant: null,
      participantToEvent: []
    };
    this.handleShowClick = this.handleShowClick.bind(this);
    this.onHandleEventByTypeFetch = this.onHandleEventByTypeFetch.bind(this);
    this.handleParticipantSearch = this.handleParticipantSearch.bind(this);
    this.onHandleEventFetch = this.onHandleEventFetch.bind(this);
  }
  handleShowClick() {  // onClick
      if (this.state.searchByType !== null) {
        this.onHandleEventByTypeFetch();  // select * from ... where type=...
      } else {
        this.onHandleEventFetch(); // select * from ...
      }
      if (this.state.searchByParticipant !== null) {
        this.handleParticipantSearch();
      }
  }
  handleParticipantSearch() {
    const list = [];
    this.state.participantToEvent.map(itemP => {  // participantToEvent связующая таблица
      if (itemP.parid === this.state.searchByParticipant) {
        this.state.event.map(itemEvent => {
          if (itemEvent.id === itemP.eventid) {
            list.push(itemEvent);
          }
        });
      }
    });
    console.log(list);  // здесь выводится массив с нужными данными
    this.setState({ event: list });
  }
  onHandleEventFetch() {
    fetch( ... , {
      method: 'GET'
    })
        .then((response) => {
          if (response.status >= 400) {
            throw new Error('Bad response from server');
          }
          return response.json();
        })
        .then(data => {
          if (data.length === 0) {
            alert('Не найдено');
          } else {
            this.setState({
              event: data
            });
          }
        });
  }
  onHandleEventByTypeFetch() {
    fetch( ... , {
      method: 'GET'
    })
        .then((response) => {
          if (response.status >= 400) {
            throw new Error('Bad response from server');
          }
          return response.json();
        })
        .then(data => {
          if (data.length === 0) {
            alert('Не найдено');
          } else {
            this.setState({
              event: data
            });
          }
        });
    ...
  }
}
Структура this.state.event:
[{id: 1, name: 'New event', participant: 5, type: 10}, ...]
Структура this.state.participantToEvent:
[{id: 1, idparticipant: 5, idevent: 1}, ...]