反应.js:无法读取未定义的属性'toLowerCase'



此错误导致整个页面无法显示。我必须在本地加载一个项目(我没有写(,但这是控制台中弹出的第一件事。

代码:

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的首次使用:roleCookie=roleCooki.toLowerCase((;

如果cookie值不存在,则cookie.load返回undefined。您需要首先检查它是否存在,而不是天真地将值转换为小写。例如:
roleCookie = roleCookie ? roleCookie.toLowerCase() : roleCookie;

对于可能面临undefined的每个数据获取和分配,您最好根据您的代码进行回退,如下所示:

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

此外,您还可以通过条件为覆盖它破例

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

顺便说一下,不要再使用CCD_ 4而使用componentDidMount()。异步就是异步:(

最新更新