Что быстрее и эффективнее: useState или useReducer? - PullRequest
1 голос
/ 22 сентября 2019

Как я видел в документе, useState и useReducer выполняют ту же работу.Просто useReducer нужно что-то сделать вручную и лучше для сложного состояния.

Мой вопрос, что быстрее ?Я имею в виду, что сделает работу за меньшее время?

В настоящее время я использую useState:

const [messages, setMessages] = useState({});

const setMessage = (message, room) => {
        setMessages(messages => {
          if (messages[room] !== undefined)
            return {...messages, [room]: [message, ...messages[room]] };
          else return { ...messages, [room]: [message] };
        });
}

Здесь, как вы можете видеть, я храню сообщения каждой комнаты с помощью setMessages.Это работает очень хорошо, но я сбиваю с толку, будет ли быстрее , если я использую useReducer вместо useState?

мой объект сообщения будет таким, как показано ниже:

const message = {
      id: 'randomid',
      text: 'a message text',
      date: new Date(),
      user: 'user1',
      sent: false,
      received: false,
      delevered: false
}

const room = 'somerandomeroomid';

Ответы [ 2 ]

2 голосов
/ 22 сентября 2019

useState использует useReducer под капотом ( React source code ):

function updateState<S>(initialState: (() => S) | S,): [S, Dispatch<BasicStateAction<S>>] {

  return updateReducer(basicStateReducer, (initialState: any));
}

Я не думаю, что будет какая-либо разница в производительности.

1 голос
/ 22 сентября 2019

Как сказал Мохамед Рамрами -

useState использует useReducer под капотом

, так что теоретически useReducer быстрее, чем вы помните, что

Premature optimization is the root of all evil

, поэтому сосредоточьтесь на качестве и удобочитаемости кода, и вы должны решить проблему с использованием некоторой измерительной техники в тот момент, когда вы начнете сталкиваться с ними, что может даже не произойти, React довольно оптимизирован.

...