reactjs - 状态更改后更新 React 子组件
问题描述
我制作了一个文本输入框,当提交时,它将更新父组件中消息的状态。父组件中的消息被传递到消息显示。我希望负责显示消息的组件在每次提交后更新和显示消息,但不知道该怎么做。我在这里做了一个代码沙箱:
https://codesandbox.io/s/unruffled-pasteur-nz32o
这是我的代码:
父组件:
import React, { Component } from "react";
import Messages from "./Messages";
import Input from "./Input";
export default class Container extends Component {
constructor(props) {
super(props);
this.state = {
messages: []
};
}
updateMessage(message) {
this.state.messages.push(message);
}
render() {
return (
<div>
<Messages messages={this.state.messages} />
<Input updateMessage={message => this.updateMessage(message)} />
</div>
);
}
}
消息输入组件:
import React, { Component } from "react";
export default class Input extends Component {
constructor(props) {
super(props);
this.state = {
message: ""
};
}
sendMessage() {
this.props.updateMessage(this.state.message);
this.setState({ message: "" });
}
render() {
return (
<div>
<input
type="text"
value={this.state.message}
onChange={({ target }) => {
this.setState({ message: target.value });
}}
/>
<button onClick={() => this.sendMessage()}>Send</button>
</div>
);
}
}
消息显示组件:
import React, { Component } from "react";
export default class Messages extends Component {
render() {
return this.props.messages.map(message => {
return <div>{message}</div>;
});
}
}
谢谢!
解决方案
在您的updateMessage(message)
方法中,您可以尝试:
updateMessage(message) {
let { messages } = this.state;
messages.push(message)
this.setState({ messages })
}
推荐阅读
- mysql - 如何在.sql中将出生年份更改为年龄?
- java - 有没有办法弄乱从 Firebase 实时数据库下载我的个人资料图片的代码?
- user-interface - Run automation script from a Action?
- r - Subsetting in a second level R function
- python - Python、Jupyter 笔记本内核错误无
- sequelize.js - Sequelize – 迁移与模型定义
- dialogflow-es - 对 Google Dialogflow 中的非文本电报消息采取行动。后备意图应该转发所有内容
- python - 如何检查一个条目是否在 Pandas DataFrame 中?
- python - Pandas 如何用每个 id 总结月份值
- java - 当我们进行 concat 操作时,string 将在 java 中创建对象?