То же состояние реакции и хук реакции для двух компонентов

У меня проблема с сортировкой и фильтрацией данных, так как я использую тот же метод setData для productsort и filterBy, но отсортированные данные обновляются в dom, когда я сначала запускаю изменение в компоненте filterBy, а затем отображаются только отсортированные данные

export default ({
  data = [],
  filterBy,
  productSort,
}: Iproduct) => {
  const [_data, setData] = useState<any>(data)

  useEffect(() => {
    setData(
      data.sort((a: Obj, b: Obj) => {
        if (a.name < b.name) {
          return -1
        }
      })
    )
  }, [data])

  return (
    <>
      <div className="sortMenu">
        {productSort &&
          ComponentsBuilder({
            ...productSort,
            onChange: (name: string, value: string) => {
              setData(
                data.sort((a: Obj, b: Obj) => {
                  if (a.name > b.name) {
                    return -1
                  }
                })
              )
            },
          })}
        {filterBy &&
          ComponentsBuilder({
            ...filterBy,
            onChange: (event: ChangeEvent<any>) => {
              const { value } = event.target
              setData(
                data.filter(({ name }: any) =>
                  name.toLocaleLowerCase().includes(value.toLocaleLowerCase())
                )
              )
            },
          })}
      </div>
      <List
        className="products-cards-list"
        data={_data}
        grid={grid}
      />
    </>
  )
}

person tushara    schedule 17.05.2021    source источник
comment
Это не дубликат, они разные, пожалуйста, прочитайте описание полностью... прежде чем делать дубликат   -  person tushara    schedule 17.05.2021
comment
Это тот же вопрос. Вам не хватает ключевого элемента. Когда вы меняете filter, вам нужно будет сохранить его в состоянии, а не применять напрямую. Сортировка и фильтрация должны выполняться при каждом изменении состояния. Есть много способов сделать это, но дублирующаяся ссылка объясняет это более подробно.   -  person ChrisG    schedule 17.05.2021