Реакция: Как вызвать несколько функций, изменяющих состояние, в одной процедуре?

Интересно, почему так много «решений» отправлено?

Если мое понимание новобранец о том, как работает GetFiles, прав, есть только два варианта, и любое из вышеперечисленных решений может быть сведено до эти:

  1. GetFiles, а затем фильтр: быстрый, но убийца памяти из-за хранения служебных данных до тех пор, пока фильтры не будут применены
  2. Фильтр в то время как GetFiles: медленнее добавляется больше фильтров, но малое использование памяти, поскольку никакие накладные расходы не хранятся. Это объясняется в одном из вышеуказанных сообщений с впечатляющим эталоном: каждый параметр фильтра вызывает отдельную операцию GetFile, так что одна и та же часть жесткого диска читается несколько раз.

На мой взгляд, вариант 1) лучше, но использование SearchOption.AllDirectories в таких папках, как C: \, будет использовать огромные объемы памяти. Поэтому я бы просто сделал рекурсивный под-метод, который проходит через все подпапки, используя опцию 1)

Это должно привести только к 1 GetFiles-операции в каждой папке и, следовательно, быть быстрым (вариант 1), но использовать только небольшой объем памяти, поскольку фильтры применяются после того, как каждая вложенная папка «чтение»> служебные данные удаляются после каждой подпапки.

Пожалуйста, исправьте меня, если я ошибаюсь. Я, как я сказал, совершенно новый для программирования, но хочу глубже понять вещи, чтобы в итоге стать хорошим:)

1
задан sheff2k1 25 February 2019 в 15:58
поделиться

1 ответ

Вы должны использовать форму обратного вызова setState:

this.setState((state, props) => ({
  ...state
  items: [...state.items, { id, eventName, time, data, owner }]
})

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

0
ответ дан Retsam 25 February 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: