我不知道为什么this.role在渲染中是未定义的。
export default class Dashboard extends Component {
componentDidMount() {
this.role = window.localStorage.getItem('role')
console.log('role', this.role) //return admin
}
render(){
console.log('role', this.role) //return undefined
return(
<div>
Component
</div>
)
}
}
我检查了我的应用的localStorage,它有价值。
答案 0 :(得分:3)
它返回未定义,因为您在组件装载后this.role
设置了componentDidMount
。所以第一个渲染没有this.role
。
运行componentDidMount
后,您不会更改状态,渲染不会再次运行(因此无法获取新信息)。
尝试使用componentWillMount
代替它,它可能会起作用。
这里是React Lifecycle documentation。
编辑:添加了代码。
export default class Dashboard extends Component {
componentWillMount() {
this.role = window.localStorage.getItem('role')
console.log('role', this.role) // return admin
}
render(){
console.log('role', this.role) // now returning admin because this.role is set before the 1st render
return(
<div>
Component
</div>
)
}
}
正如其他用户指出的那样,您也可以使用setState,它也可以工作(在这种情况下,当状态发生更改时,再次运行渲染并相应地显示您的角色)。
答案 1 :(得分:2)
在初始渲染时,会调用render()方法(在调用componentDidMount()之前),因此它显示为“undefined”。 更改'this.role'的值不会重新呈现页面。
你必须为此使用州。 我认为下面的代码应该可行。
export default class Dashboard extends Component {
constructor(){
super()
this.state = {
role : undefined
}
}
componentDidMount() {
this.setState({role: window.localStorage.getItem('role')})
console.log('role', this.role) //return admin
}
render(){
console.log('role', this.state.role) //return undefined
return(
<div>
Component
</div>
)
}
}
答案 2 :(得分:0)
您在视图中看到undefined
,因为在组件呈现时,role
中没有任何内容,因为在初始渲染后调用了componentDidMount
。此外,在您从role
设置localStorage
值之后,组件不会重新呈现,因为它不在状态上。如果您将role
置于状态并执行此操作:
componentDidMount() {
this.setState({ role: window.localStorage.getItem('role')});
}
render(){
console.log('role', this.state.role)
return(
<div>
Component
</div>
)
}
然后您将能够在视图中看到role
的值,但是根据有关{{1}的反应文档,它将导致组件的额外重新呈现,因为您将更改其state
}:
在此方法中调用setState()将触发额外的渲染,但是 它会在浏览器更新屏幕之前发生。
您可以详细了解componentDidMount
here。
更新
在您的情况下,您不必将componentDidMount
置于状态,但随后您可以从role
获取其值:
constructor
它将在视图中显示。