javascript - 将新项目添加到状态时反应表附加空行
问题描述
当我向 React 中的表添加新项目时,我会更新状态,但表不会使用新数据重新渲染。我知道正在传递数据,因为新项目出现在状态中,并且追加了新行,但props.children
表中的所有内容都是空的。
这是父组件的简化版本。
class Page extends Component {
initialState = {
users: [],
}
state = this.initialState
async componentDidMount() {
const users = await getDataFromApi()
this.setState({ users })
}
addRow = user => {
this.setState({ users: [...this.state.users, user] })
}
render() {
return (
<div>
<AddModal addRow={this.addRow} />
<Table data={this.state.users} />
</div>
)
}
}
添加用户模式正在发布到 API(成功)并且
handleSubmit = async event => {
event.preventDefault()
const response = await postDataToApi()
const user = await getNewUser(response)
addRow(user)
}
所以 API 更新成功,新用户读取成功,数据成功添加到状态,添加的新行具有正确的 ID,但表的 prop children 为空,所以前端只是显示一个空行。
表格组件 - 我在语义 UI 上使用了自定义表格包装器react-table
,并且无论哪种方式问题都存在。
class Table extends Component {
render() {
const { data } = this.props
return (
<DataTable
data={data}
meta={column keys and values}
/>
)
}
}
class DataTable extends PureComponent {
state = {}
componentWillReceiveProps(nextProps) {
this.setState({ data: nextProps.data, meta: nextProps.meta })
}
...etc
编辑:我没有以正确的格式发送数据。
解决方案
推荐阅读
- bulkinsert - 如何改进 - 使用多个 OledbConnections 的具有不同 ID 的多个插入
- android - 将帖子发送到服务器并通过 android 获取结果
- android - 为什么 ADB Over WIFI 无法在 Android 10 上运行
- jquery - 如何按类别分隔行中的特定项目,如果有一个项目具有不同的类别,则追加到新行中
- javascript - 角度路由,包括身份验证保护和重定向
- javascript - 防止重新渲染数组映射组件
- typescript - 如何将声明的条件推断类型与另一个类似的条件推断类型匹配
- c# - 检查两个具有半径的地理位置是否在彼此的半径内
- python - 如何在 unittest 测试期间添加计数器?
- python - 第三方包的 mock.patch() 的 Pytest 路径