【问题标题】:React: ChildComponent not getting re-rendered when state changesReact:状态更改时 ChildComponent 不会重新渲染
【发布时间】:2020-10-03 09:55:46
【问题描述】:

我正在用 React 开发一个简单的聊天应用程序,消息存储在 Redux Store 中。我正在循环浏览消息并在<MessageContainer /> 中呈现<Message />。现在我想向发送者确认消息已被接收者看到,因为我正在监听一个事件并更改 redux 中的消息对象,这会导致 <Message /> 的状态发生变化。我在<Message /> 中使用getDerivedStateFromProps() 并且能够更改状态,但是组件没有得到更新。

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>
 }
}

【问题讨论】:

    标签: javascript node.js reactjs socket.io


    【解决方案1】:

    为什么只使用道具?

    class Message extends React.Component {
      render() {
       <div>
        {this.props.isMessageSeen ? 'Message Seen' : 'Message Sent'}
       </div>
      }
    }
    

    当 props 改变时,React 总是会重新渲染

    【讨论】:

    • 同意你的看法。我正在使用不同的图标代替“看到的消息”和“已发送的消息”,这些图标不会根据情况而改变,但我只是检查了 paragreaph

      标签的作用就像一个魅力。不知道为什么图标没有重新渲染。

    • @PrashantAgarwal 如果这回答了您的问题,您可以将其标记为正确吗?随时向另一个人询问未重新渲染的图像,我很乐意回答:)
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 2021-11-24
    • 2019-02-27
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多