@n1ksON
мидл

Как ускорить рендер после изменения input?

Всем привет. У меня притормаживает проект из-за изменения input'ов. Я, как полагается, повесил обработчик событий, чтобы после каждого изменения value в input, вызывался dispatch и новое value передавалось в state, а затем отображалось. Как обычно оптимизируется изменение полей ввода в React-проектах?

У меня на странице генерируется некоторое число полей ввода. Из-за того, что я не знаю, сколько будет input'ов, я не использую useRef(). На сколько вообще важно использовать хук useRef() для полей ввода?

Нужно ли использовать метод bind(), при передаче dispatch через props?

И вообще, адекватно ли я реализовал схему изменения value в input или это говнокод?
Redux решил не использовать, так как проект не очень большой.
App.js:
const initialState = { text: [] } // это написано вне App.js. 
const reducer = (textarea, action) => {
  let arr = textarea.text // массив text содержит объекты типа: { id: 0, string: 'string' }
  let index = 0
  switch (action.type) {
    case 'change':
      index = arr.findIndex(n => n.id === action.id)
      arr[index].string = action.value
      return { text: arr }
    default:
      console.log('Error')
  }
}
const App = () => {
    const [textarea, dispatch] = useReducer(reducer, initialState)
}

{textarea.text.map(data =>
        <Textarea key={data.id} string={data.string} id={data.id} dispatch={dispatch} />
 )}

Textarea.js:
const change = ({ value, id }) => { 
        props.dispatch({ type: 'change', id: Number(id), value: value })
}

<textarea id={props.id} value={props.string} onChange={(e) => change(e.target)} />

Выложил только самую важную часть кода. Если этого будет недостаточно, то могу выложить бОльшую часть проекта в песочницу.
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 1
Gimir
@Gimir
JavaScript dev
Посмотри в сторону useMemo(), useCallback() и HOC компонента memo для оптимизации рендеров. Советую использовать react-hook-select для форм, там при редактировании инпутов не происходит лишних рендеров и сама библиотека очень проста в освоении.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы