Реакция. js: Невозможно прочитать свойство 'toLowerCase' из неопределенного - PullRequest
0 голосов
/ 06 марта 2020

Эта ошибка приводит к тому, что вся страница не отображается. Я должен загрузить проект локально (я не писал его), но это первое, что появляется в консоли.

Код:

class Panel extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      DropdownTitle: 'Screen',
      setScreenByCookie: true
    };
  }
  componentWillMount() {
    const { dispatch } = this.props;
    var roleCookie = cookie.load('role');
    roleCookie = roleCookie.toLowerCase();
    const accountId = cookiefetch('accountId','');
    var accid = accountId.toLowerCase();
    const overrideCompany = cookiefetch('overrideCompany', '');
    if(overrideCompany != '') {
      var title = "Screen ("+overrideCompany+")";
      this.setState({DropdownTitle: title});
    } else {
      this.setState({DropdownTitle: 'Screen'});
    }
    var roleCookie = roleCookie.toLowerCase();
    if (roleCookie == 'administrator' || roleCookie == "adminread") {

        dispatch(getCompaniesDropdown());

    } else {
      dispatch(getCompany(accid));
      dispatch(getDropdown(accid));
      //dispatch(companyDropdownAction(false, accid, accid));
    }
  }

Ошибка:

Panel.js:47 Uncaught TypeError: Cannot read property 'toLowerCase' of undefined
    at Panel.componentWillMount (Panel.js:47)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:210)
    at ReactCompositeComponentWrapper.ReactCompositeComponent_mountComponent [as mountComponent] (ReactPerf.js:66)
    at Object.mountComponent (ReactReconciler.js:37)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:225)
    at ReactCompositeComponentWrapper.ReactCompositeComponent_mountComponent [as mountComponent] (ReactPerf.js:66)
    at Object.mountComponent (ReactReconciler.js:37)
    at ReactDOMComponent.mountChildren (ReactMultiChild.js:241)
    at ReactDOMComponent._createContentMarkup (ReactDOMComponent.js:591)
    at ReactDOMComponent.mountComponent (ReactDOMComponent.js:479)

Строка 47 - первое использование toLowerCase: roleCook ie = roleCook ie .toLowerCase () ;

Ответы [ 2 ]

1 голос
/ 06 марта 2020

cookie.load возвращает undefined, если этого значения ie не существует. Вместо наивного преобразования значения в нижний регистр, вам нужно сначала проверить, существует ли оно. Например:

roleCookie = roleCookie ? roleCookie.toLowerCase() : roleCookie;
0 голосов
/ 06 марта 2020

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

accountId = cookiefetch('accountId','') ? cookiefetch('accountId','') : 'someDefaultValue'

Также вы можете сделать исключение для переопределения его через условия

if(accountId) { var accid = accountId.toLowerCase(); }

кстати, больше не используйте componentWillMount() и используйте componentDidMount(). Asyn c isyn c:)

...