javascript - componentDidMount 不渲染
问题描述
我有一个 Header 组件,它假设通过用户是否登录的条件来呈现他的子组件。它通过会话存储识别条件。我试图通过以下方式控制渲染
componentDidMount
:
renderUserHeader = () => {
if (sessionStorage.getItem('user-auth')) {
var tokenToSend = { token: sessionStorage.getItem('user-auth') }
var regJSONED = JSON.stringify(tokenToSend)
fetch('http://localhost:4000/users/token', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: regJSONED
})
.then(response => {
if (!response.ok) {
throw new Error('HTTP error ' + response.status)
}
return response.text()
})
.then(data => {
let JsonedUserName = JSON.parse(data)
this.setStateUserName(JsonedUserName.name, JsonedUserName.admin)
})
if (!this.state.admin) {
return <UserHeader name={this.state.userName} />
} else if (this.state.admin) {
return <AdminHeader name={this.state.userName} />
}
} else if (!sessionStorage.getItem('user-auth')) {
return (
<Link to='/login'>
{' '}
<LoginLink />{' '}
</Link>
)
}
}
componentDidMount() {
this.renderUserHeader()
}
如您所见,renderUserHeader
组件确实已安装,但无法正常工作。
我尝试renderUserHeader
在渲染内部调用并且它有效,但它一直在窃听,我每次都必须刷新页面。
render() {
return (
<header>
<Logo />
{this.renderUserHeader()}
</header>
)
}
有人可以告诉我为什么componentDidMount
不起作用吗?
解决方案
componentDidMount 仅用于获取数据和更新组件状态等副作用。如果您<Link />
从 componentDidMount 返回某些组件(例如),它将不会被渲染。而且你不应该在渲染中做任何副作用。
相反,您应该在 componentDidMount 中获取和更新状态,并根据状态渲染相应的组件。
推荐阅读
- django - 如何解决:以 10 为底的 int() 的值错误无效文字:'Shuk'?
- r - 当矢量化不可行时,迭代数据帧中的行的 tidyverse 方法是什么?
- javascript - 在使用 BIND() 将自定义组件方法绑定到组件时,我们可以将第一个参数作为组件本身传递吗?
- c++ - 对如何重载 == 运算符感到困惑
- tensorflow - 用于字符识别的 ROI 池化层
- javascript - 开玩笑,如何忽略特定文件夹的测试覆盖率?
- git - 将 .netlify/state.json 添加到 .gitignore 不起作用
- docker - Redis Docker 未与其他 docker 容器链接
- android - 按钮文本不随 ViewModel 更改而更改
- c - 伺服电机在 Proteus 中无法正常移动