Может ли Redux управлять просто логическим значением? - PullRequest
0 голосов
/ 18 мая 2018

У меня в приложении React & Redux есть состояние, касающееся аутентификации .Это boolean.

Я бы хотел упростить захват этого фрагмента состояния из магазина Redux, но не могу найти примеры этого.

Является ли этот подход плохой идеей?Я знаю, что состояние мутации не правильный подход.Я не уверен, что это мутация.

import {
  AUTHENTICATED,  
  AUTHENTICATION_ERROR,
  AUTHENTICATION_REMOVE,
  UNAUTHENTICATED,
} from '../actions/types';

let INITIAL_STATE = false

export default function( state = INITIAL_STATE, action) {
  switch(action.type) {
    case AUTHENTICATED:
      return !state

    case UNAUTHENTICATED:
      return state

    case AUTHENTICATION_ERROR:
      return state

    case AUTHENTICATION_REMOVE:
      return !state

    default:
      return state;
  }
}

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Когда ваше состояние просто логическое, вы фактически не изменяете состояние, записывая !state, поскольку значения boolean, string и number являются неизменяемыми.

Также неплохо было бы хранить просто логическое значение в состоянии редуктора.Однако вы должны прочитать You Might not need Redux, чтобы понять, когда следует и не следует использовать redux

0 голосов
/ 18 мая 2018

Вы можете попробовать этот усилитель redux-named-redurs

Тогда ваш редуктор упростится до чего-то вроде этого:

authModule.reduce(AUTHENTICATED, { isAuthenticated: true })
authModule.reduce([UNAUTHENTICATED, AUTHENTICATION_ERROR, 
AUTHENTICATION_REMOVE], { isAuthenticated: false })

Затем вы можете получить доступ к состоянию аутентификацииоткуда-нибудь, как это:

getState(authModule.isAuthenticated)

Я очень строгий с состоянием аутентификации, которое здесь устанавливается только при аутентификации, и отменяется для всего остального, но вы можете настроить, как считаете нужным.

0 голосов
/ 18 мая 2018

Это прекрасно.Потому что вы ничего не мутируете из состояния.

Да, вы не мутируете state.Потому что ваше состояние - просто значение boolean, и вы возвращаете противоположное значение вашего состояния.Но вы не вносите никаких изменений в состояние.

const value = true;
console.log(!value) // This will not change the value directly but it just returns false

Но попробуйте использовать key в штате.В будущем, если вы хотите добавить еще несколько ключей.Вам не нужно делать так много изменений.

...