reactjs - 未显示反应组件数据
问题描述
我是 React 的新手,正在尝试编写一个程序,其中我创建了 3 个组件:表格、表格标题和表格正文,并将表格标题和表格正文包含在表格中。我正在尝试使用状态从 App.js 传递数据并尝试将其显示到 Table 组件中。我没有收到任何错误,但我没有得到想要的结果。
这是 React 开发工具输出的截图:
这里它表明状态具有值:
这里它显示它是空的,所以我猜数据没有被传递:
应用程序.js:
import React, { Component } from 'react';
import './App.css';
import Table from './Table';
class App extends Component {
/*You can think of state as any data that should be saved and modified
without necessarily being added to a database – for example,
adding and removing items from a shopping cart before confirming your purchase.*/
state={
characters:[
{
'id':1,
'name':'Smit',
'job':'Student'
},
{
'id':2,
'name':'Tom',
'job':'Teacher'
},
{
'id':3,
'name':'Hardee',
'job':'Friend'
},
{
'id':4,
'name':'Dom',
'job':'Principal'
},
{
'id':5,
'name':'Dik',
'job':'Cleaner'
}
]
};
//to remove any data field from table using state
removeCharacter = index => {
//console.log(this.state);
const { characters } = this.state;
//console.log(characters);
//to update the state if data is modified
this.setState({
characters: characters.filter((character, i) => {
return i !== index;
})
});
}
render() {
//declared characters which will contains data to be insterted into table
const characters=[];
return (
<div className="container">
{/*Need to pass the character into table so passing it through charData variable into Table component */}
<Table characterData={characters}
removeCharacter={this.removeCharacter}
/>
</div>
);
}
}
export default App;
表.js
import React, { Component } from 'react';
class Table extends Component {
render() {
const { characterData, removeCharacter } = this.props;
return (
<table>
<TableHeader />
<TableBody
characterData={characterData}
removeCharacter={removeCharacter}
/>
</table>
);
}
}
const TableHeader = () => {
return (
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Job</th>
</tr>
</thead>
);
}
const TableBody = props => {
//passing the props through as a parameter,
//and map through the array to return a table row for each object(element) in the array.
//This map will be contained in the rows variable, which we’ll return as an expression.
const rows = props.characterData.map((row, index) => {
return (
<tr key={index}>
<td>{row.id}</td>
<td>{row.name}</td>
<td>{row.job}</td>
<td><button onClick={() => props.removeCharacter(index)}>Delete</button></td>
</tr>
);
});
return <tbody>{rows}</tbody>;
}
export default Table;
解决方案
在将字符传递给 Table 组件之前,您将其声明为空数组。在你的应用程序的渲染方法中声明字符,就像你在 removeCharacter 方法中一样。
const { characters } = this.state;
所以
改变
render() {
//declared characters which will contains data to be insterted into table
const characters=[];
return (
至
render() {
//declared characters which will contains data to be insterted into table
const { characters } = this.state;
return (
推荐阅读
- android - 从firebase下载文件时如何显示进度条?
- ajax - 使用 iframe 隐藏 POST 来源?
- sql - 根据显示的图像,来自 ab 和 bc 表的 ID_DETAILS 列
- python - 形成一个两列 DataFrame 的最佳方法,其中第二列是第一列的转换?
- excel - 获取外部数据时截断最后一个零
- docker - 使用 hyperledger caliper 运行测试时出错
- javascript - 对于从 `fetch` 接收的 JSON,`Body.json()` 是否比`JSON.parse(responseText)` 快?
- python - Python TypeError:使用 witn open() 时的字符串格式
- amazon-web-services - 外部合作伙伴在 AWS 账户中上传 S3 对象的机制
- node.js - 检查某些表情符号是否有反应 - Discord.js