У меня есть CodePen, который иллюстрирует проблему здесь: https://codepen.io/elegault/pen/QzZwLO
Сценарий : компонент DetailsList и поле поиска (компонент TextField). Элементы списка могут быть отфильтрованы по типу пользователя в поле поиска. Любой выбранный проект все равно будет выбран в результатах поиска, ЕСЛИ он есть в результатах поиска. Если его нет в результатах поиска и последующий поиск включает этот выбор, он будет переизбран. (ПРИМЕЧАНИЕ: команда Office UI Fabric, похоже, знает, что это должно быть обработано изначально, но я не уверен в планах добавить эту функциональность в соответствии с этой проблемой GitHub ).
Проблема : после каждого нажатия клавиши фокус теряется, что затрудняет ввод и редактирование критериев поиска, поскольку пользователю приходится каждый раз повторно вставлять курсор.
Что не работает : вызов focus () для TextField, когда он уже сфокусирован (isFocused = true), ничего не делает. Вызов focus () работает только тогда, когда isFocused = false. Но это верно только тогда, когда DetailsList.focusIndex () вызывается после восстановления выбора в отфильтрованном списке.
Псевдо-код:
componentDidUpdate(previousProps: any, previousState: AppProjectListState) {
//Toggle off the current selection
this._selection.toggleIndexSelected(currentIdx);
//Set the new selection
this._selection.toggleIndexSelected(newIdx);
//Scroll the selection into view
this._detailsListRef.current.focusIndex(newIdx, false);
}
Это какая-то ошибка в компоненте TextField или DetailsList? Или как я это делаю в жизненном цикле компонента React? Или есть способ гарантировать, что фокус не будет потерян из TextField, пока пользователь печатает, а элементы списка пересчитываются, а выбранный индекс изменяется?