为什么新列表仅在输入更改后显示?

Why is the new list only showing after an input change in react?

通过 'send' 提交新消息以添加到我要呈现的列表后,客户端屏幕上没有更新任何列表。但是,一旦我在那之后在输入框中做了任何事情,就会显示该项目。所以它正在工作......只是在修改器更改调用之后才更新并且没有按照我想要的方式工作。 :D

我认为这是因为之后点击输入中的任何内容都会更新页面,因此调用了 componentDidUpdate,但我不确定为什么 renderChatList 在我喜欢的时候没有更新。

我该怎么做或四处走走才能解决这个问题?

export class Chat extends React.Component{

  constructor(props){
    super(props);
    this.state = {
      text: '',
      nextId: 0,
      chatList: []
    };
  }

  componentDidMount(){
    socket.on('newMessage', (message) => {this.state.chatList.push({...message}) });
  }

  onTextChange(e){
    this.setState({text: e.target.value});
  }

  renderChatList() {
    return this.state.chatList.map((chatItem) => {
      return <li key={chatItem.createdAt}>{chatItem.from}: {chatItem.text}</li>
    });
  } 
  send(e) {
    e.preventDefault();
    socket.emit('createMessage', {
        from: this.props.owner,
        text: this.state.text
    }, function(){});
  }

  render(){
      return (
        <div>
          <form onSubmit={this.send.bind(this)}>
            <input type="text" onChange={this.onTextChange.bind(this)} placeholder="message"/>
            <button>Send chat</button>
          </form>
          <ul>{this.renderChatList()}</ul>
        </div>
      )
  }
};

只有用setState()改变状态,组件才能重新渲染。您需要将向状态添加评论的方式更改为:

socket.on('newMessage', (message) => {
  this.setState({ chatList: [...this.state.chatList, {...message}] }) 
});

当前在您输入某些内容后显示消息的原因是因为更改输入会更改 setState() 的状态并导致组件重新呈现。