Проблема с повторным вводом таблицы реакции

#javascript #reactjs

#язык JavaScript #реагирует на

Вопрос:

Я создал таблицу, когда пользователь загружает файл csv. Этот файл отправляется на серверную часть для обработки и возврата данных с префиксом: «ОШИБКА:», чтобы определить ошибки в моей таблице.

Поэтому, когда ячейка содержит слово » ОШИБКА:», эта ячейка будет выделена красным цветом и будет содержать ввод для исправления этой ошибки.

Это элемент Cells, который я отображаю в таблицу react, а также мое состояние:

 const initialHoverError = {  rowIndex: 0,  cellName: '',  errorMessage: ''  }  const [hoverError, setHoverError] = useState(initialHoverError)    const Cells = ({row}) =gt; useMemo(() =gt; { const { original } = row return row.cells.map(cell =gt; {  const { column } = cell  const { id: cellIndex } = column  const { rowIndex, cellName, errorMessage } = hoverError   const hasError = checkError(original[cellIndex])   return (  lt;Table.Td  {...cell.getCellProps()}  className={cn(styles.Cell, { [styles.HasError]: hasError })}  onMouseEnter={() =gt;  handleHoverError('active', row.id, cellIndex, original[cellIndex])  }  onMouseLeave={() =gt; handleHoverError()}  gt;  {hasError ? (  lt;divgt;  lt;Text  className={cn(styles.ErrorText, {  [styles.ErrorVisible]:  cellIndex === cellName amp;amp; row.id   1 === rowIndex   1  })}  gt;  {errorMessage}  lt;/Textgt;  lt;input  className={styles.ErrorInput}  onBlur={event =gt; handleErrorUpdate(event, cellIndex, row.id)}  /gt;  lt;/divgt;  ) : (  cell.render('Cell')  )}  lt;/Table.Tdgt;  ) }) }, [data])  

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

 const handleHoverError = (type, rowIndex, cellIndex, text) =gt; {  const hasError = checkError(text) if (type === 'active' amp;amp; hasError) {  setHoverError({  rowIndex,  cellName: cellIndex,  errorMessage: text.slice(6)  })  return } return setHoverError(initialHoverError) }  

Таким образом, проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда моя мышь покидает td(onMouseLeave), мое поле ввода теряет фокус и повторяется(очищается). Поэтому, когда я ввел что-то во ввод и мышь покидает элемент td, ввод остается пустым и не в фокусе.

И, наконец, вот как я обновляю свое поле ввода. Когда эта функция наведения удалена, все работает идеально.

 const handleErrorUpdate = (event, cellIndex, rowIndex) =gt; { event.preventDefault() const newData = [...data] if (event.target.value !== '')  newData[rowIndex][cellIndex] = event.target.value setData(newData) }  

Пожалуйста, дайте мне несколько советов.