如果cookie值不存在,则
此错误导致整个页面无法显示。我必须在本地加载一个项目(我没有写(,但这是控制台中弹出的第一件事。
代码:
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.load
返回undefined
。您需要首先检查它是否存在,而不是天真地将值转换为小写。例如:
roleCookie = roleCookie ? roleCookie.toLowerCase() : roleCookie;
对于可能面临undefined
的每个数据获取和分配,您最好根据您的代码进行回退,如下所示:
accountId = cookiefetch('accountId','') ? cookiefetch('accountId','') : 'someDefaultValue'
此外,您还可以通过条件为覆盖它破例
if(accountId) { var accid = accountId.toLowerCase(); }
顺便说一下,不要再使用CCD_ 4而使用componentDidMount()
。异步就是异步:(