.push () создает повторяющиеся выпадающие списки фильтров таблиц при повторном посещении страницы

#reactjs #typescript #state #setstate

#reactjs #typescript #состояние #setstate

Вопрос:

У меня есть пользовательская таблица со свойством filters. 3 фильтра жестко запрограммированы, но 1 из фильтров собирается с помощью POST-запроса из нашего API, потому что их параметры фильтра часто обновляются в нашей базе данных людьми, не занимающимися инженерными разработками.

Моя проблема в том, что когда вы нажимаете кнопку «Назад», чтобы перейти на страницу с этой пользовательской таблицей, на страницу добавляются дубликаты фильтров Gateways. Этот элемент исчезает при обновлении страницы, что продемонстрировало мне, что я столкнулся с проблемой с состоянием. Как я могу сделать так, чтобы фильтр Gateways отображался только один раз?

Вот код для таблицы:

        <CredcapTable
          defaultSort="created_at"
          cols={cols}
          filters={filters}
          searchFunc={this.searchFunc}
          recordMappingFunc={this.recordMappingFunc}
        />  

Вот функция, которая извлекает фильтры Gateways из базы данных, которая вызывается в componentDidMount:

   private loadFilters = () => {
    searchGateways(this.props.app.api, new SearchRequest()).then((res: SearchResults<Gateway>) => {
      const opts = new Array<any>();
      opts.push({ label: "All", value: "*" });

      res.results.map((g: Gateway) => {
        opts.push({ label: `${g.name} [${g.code}]`, value: g.id });
      });

      filters.push({
        field: "gateway_id",
        label: "Gateway",
        options: opts
      });

      this.setState({ filters });

    });
  };  

Комментарии:

1. Вы пробовали очищать свое состояние при размонтировании?

2. Нет, я еще не пробовал это … как бы это выглядело? Обычно я не использую componentWillUnmount на работе.

3. Попробуйте это. this.setState(prevState => ({ фильтры: prevState.filters.concat({ поле: «gateway_id», метка: «Gateway», параметры: opts }) }));

4. @remelkabir да, это сработало, спасибо!!!

5. нет проблем @J.Lara