javascript - React:状态更改时 ChildComponent 不会重新渲染
问题描述
我正在使用存储在 Redux Store 中的消息在 React 中开发一个简单的聊天应用程序。我正在循环浏览消息并<Message />
在<MessageContainer />
. 现在我想向发送者确认消息已被接收者看到,因为我正在监听一个事件并更改 redux 中的消息对象,这会导致<Message />
. 我正在使用getDerivedStateFromProps()
in<Message />
并且能够更改状态,但是该组件没有得到更新。
class MessageContainer extends React.Component {
render() {
const {messages} = this.props;
return messages.map(message => <Message key={message.id} {...message} />)
}
}
class Message extends React.Component {
constructor(props) {
super(props);
this.state = {
isMessageSeen: props.isMessageSeen
}
}
static getDerivedStateFromProps(props,state) {
return {isMessageSeen: props.isMessageSeen}
}
render() {
const {isMessageSeen} = this.state;
<div>
{isMessageSeen ? 'Message Seen' : 'Message Sent'}
</div>
}
}
解决方案
为什么要这样做并且只使用道具?
class Message extends React.Component {
render() {
<div>
{this.props.isMessageSeen ? 'Message Seen' : 'Message Sent'}
</div>
}
}
当 props 改变时,React 总是会重新渲染
推荐阅读
- crystal-lang - 如果指定了类型,类型缩小不起作用?
- javascript - 如何在续集中获得加入实体的数量?
- javascript - 在角度甘特图内设置时,Bootstrap-ui 模态显示为空白
- c# - 如何在我的整个应用程序中使用数据库连接类
- e-commerce - 我无法删除添加到购物车 laravel 5.8 bumbummen99 库的第一行
- azure-devops - Azure Dev ops 替换发布管道中每个环境的令牌
- terraform - terraform 可以启用 Azure 资源提供程序吗?
- c# - 我需要根据 ASCII 字符串值计算十六进制字符串
- css - CSS中的行/列处理
- javascript - 使用 javascript 通过 id 更改内容