Какое лучшее `useReducer` -> объявление функции редуктора - PullRequest
0 голосов
/ 11 апреля 2020

Глядя на реакцию do c, есть первоначальный способ сделать это. Но, как и многие другие, это редко эффективный способ.

Итак, мне интересно, какой самый лучший / эффективный / более чистый способ объявить функцию reducer, поскольку это чистая функция :

предположим import React, { useReducer, useCallback } from 'react'

1. Внешняя функция (стиль до c)

const reducer = (state, action) => state
const MyComp = () => {
  const [state, dispatch] = useReducer(reducer, {})
}

2. useCallback декларация

const MyComp = () => {
  const reducer = useCallback((state, action) => state, [])
  const [state, dispatch] = useReducer(reducer, {})
}

3. useCallback альтернатива встроенного объявления

const MyComp = () => {
  const [state, dispatch] = useReducer(useCallback((state, action) => state, []), {})
}

4. объявление встроенной функции

const MyComp = () => {
  const [state, dispatch] = useReducer((state, action) => state, {})
}

Примечание: удобочитаемость, конечно, важна, но мне здесь не нужен этот аргумент:)

Все эти способы "работают" и Я не вижу чрезмерного повторного объявления функции. Но я удивляюсь, почему в документации по реакции не описан способ 2. useCallback, который, если он окажется чище.

1 Ответ

2 голосов
/ 11 апреля 2020

Я предпочитаю первый подход.

Это самое простое и очень маловероятно, что вы столкнетесь с какими-либо проблемами.

Реактивная основная команда сама предупреждает против преждевременной оптимизации . использование useCallback там, где это не нужно, является преждевременной оптимизацией и добавляет ненужную сложность.

О встроенных функциях: я (и многие разработчики, которых я знаю) не одобряю встроенные функции, такие как (подход 3 или 4). это не имеет большого значения, но это не "чистый" .

...