Комплексное управление состоянием с помощью prevState (реагирование 17 / Создание приложения React 4.0)

#reactjs #react-hooks

#reactjs #реагирующие хуки

Вопрос:

Я уже некоторое время не работал с проектом, основанным исключительно на состоянии, это моя личная забава (мы используем Redux-подобный и постоянный на работе, поэтому доступ к глобальному состоянию намного больше зависит от prop). Я помещаю вложенные троичные файлы в setState hook ( setAvailableCharacters ) и я не фанат? Есть ли лучший способ, которым я мог бы это сделать?

   function levelCharacterUp(forceLevel = false) {
    setAvailableCharacters(prevState => (
        merge({}, availableCharacters, {
          [selectedClassKey]: {
            level: forceLevel ? forceLevel : prevState[selectedClassKey].level   1 <= MAX_CHARACTER_LEVEL ? prevState[selectedClassKey].level   1 : MAX_CHARACTER_LEVEL
          }
        })
      )
    );
  }
 

Не похоже, что есть более чистый способ сделать это, при этом соблюдая prevState цепочку в новое состояние.

Попытка сохранить этот чисто функциональный компонент тоже.

Ответ №1:

Это может сработать:

   function levelCharacterUp(forceLevel = false) {
setAvailableCharacters(prevState => (
    merge({}, availableCharacters, {
      [selectedClassKey]: {
        level: forceLevel ? forceLevel : Math.min(prevState[selectedClassKey].level   1, MAX_CHARACTER_LEVEL)
      }
    })
  )
);


 }