我是React的新手,看过一些类似的问题,但没有找到为什么会这样。我得到一个“未捕获的TypeError:this.state.data.map不是一个函数”。 这是代码。请帮助找出问题所在。
class Audienses extends React.Component {
constructor (props)
{
super(props);
this.state = {
data: ''
};
this.loadFromServer = this.loadFromServer.bind(this);
this.childeDelete = this.childeDelete.bind(this);
this.childeEdit = this.childeEdit.bind(this);
}
loadFromServer () {
var xhr = new XMLHttpRequest();
xhr.open('get', this.props.url, true);
xhr.onload = function() {
var data = JSON.parse(xhr.responseText);
this.setState({ data: data });
}.bind(this);
xhr.send();
}
componentDidMount() {
this.loadFromServer();
}
render () {
var audienses = this.state.data.map((value, index) => (
<OneElement key={value.id} audience={value.audience} description={value.description} />
));
/* or like this
var audienses = this.state.data.map(function(s) {
<OneElement key={s.id} audience={s.audience} description={s.description} onDeleteClick={this.childeDelete} oneEditClick={this.childeEdit} />
}).bind(this);
*/
return
<div>
<h1>Audiences</h1>
<table id="services">
<tr>
<th>Audience</th>
<th>Description</th>
<th></th>
<th></th>
</tr>
<tbody>
{audienses}
</tbody>
</table>
</div>;
}
}
答案 0 :(得分:30)
您的初始data
状态为String
。,String
没有方法.map
,您需要将初始状态从''
更改为[]
this.state = { data: [] };
答案 1 :(得分:6)
.map
不适用于String对象。考虑将“数据”更改为数组。 .map
是一种在数组的每个元素上调用函数的方法。
答案 2 :(得分:2)
我在react-redux中有相同的错误。
问题是当我在添加/产品页面中添加新产品并单击后退按钮时,主页的组件显示此错误
renderItems = (products) => (
products.product ?
products.product.map(item => (
<ProductItem {...item} key = { item._id } />
))
: null
)
我正在从节点服务器传递{}而不是[]
因此,当您在react-redux中出现这种类型的错误时,请首先检查从服务器传递到该字段的内容,然后检查该特定组件的reducer。
答案 3 :(得分:0)
首先,您必须将数据拆分为一个数组,然后可以使用map函数。代替
this.state.data.map
使用
this.state.data.split('').map()
答案 4 :(得分:0)
如果您的数据是字符串类型,则必须使用
this.state.data.split('').map(ch=>{ console.log('Hello from map') })