Javascript 异步映射ES6+;反应
我想做一个异步迭代器.map,但我不知道它是如何正确完成的。我有这个Javascript 异步映射ES6+;反应,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我想做一个异步迭代器.map,但我不知道它是如何正确完成的。我有这个 async componentDidMount() { await this.props.existingLettersActions.fetchExistingLetters(); } render () { var example= ''; var x = [ { id: 1, name: 'asdf' },
async componentDidMount() {
await this.props.existingLettersActions.fetchExistingLetters();
}
render () {
var example= '';
var x = [
{
id: 1,
name: 'asdf'
},
{
id: 2,
name: 'asdf'
}
]
if (this.props.letters) {
example = this.props.letters.map(function(item, i) {
return (
<tr key={i} styleName="container">
<td>{item.id}</td>
<td>{item.name}</td>
</tr>
);
});
}
}
return (
{example}
)
异步组件didmount(){
等待此消息。props.existingLettersActions.fetchExistingLetters();
}
渲染(){
var示例=“”;
变量x=[
{
id:1,
名称:“asdf”
},
{
id:2,
名称:“asdf”
}
]
如果(这个。道具。字母){
示例=this.props.letters.map(函数(项,i){
返回(
{item.id}
{item.name}
);
});
}
}
返回(
{示例}
)
如果我使变量“x”上的映射正确工作并正确绘制,但如果我放置this.props.letters,则会跳转一个错误,表示this.props.letters.map不是函数。如何实现异步?
console.log
不太可靠,因为它可以向您显示props.letters有一个值,但很可能是在您的render()方法被触发时,这个.props.letters还没有填充数据
很可能是组件第一次渲染时,this.props.letters将未定义(或类似)
因此,最好在渲染前检查要迭代的道具,例如:
render () {
if(!this.props.letters) {
return <div>Loading...</div>
}
return this.props.letters.map((item) =>
<tr key={item.id} styleName="container__body__table__body">
<td>{item.id}</td>
<td>{item.name}</td>
</tr>
);
}
render(){
如果(!this.props.letters){
返回加载。。。
}
返回此.props.letters.map((项目)=>
{item.id}
{item.name}
);
}
这是非常模糊的。你说的asnycronous是什么意思?字母列表是这样填写的,还是什么意思?在不知道数据是如何进入的情况下,很难给出建议。请看,我们无法根据您在问题中提供的内容为您提供帮助,因为您没有显示填充this.props.letters
的异步过程。错误消息也很有趣,因为它告诉我们this.props.letters
不是null
或未定义的
,但它也不是数组,所以…@mari数据来自api,我想异步绘制tr。如何使映射异步工作?@T.J.Crowder数据来自api,我想异步绘制tr。我怎样才能使映射异步工作?@jmrosdev:你不能,map
不是为异步使用而设计的。您还可以做其他事情,但它们取决于您尚未提供的信息。再一次:告诉我们你在处理什么,我们可以帮助你。如果你不,我们就不能。请使用堆栈片段(工具栏按钮[]
来更新您的问题,使用runnable演示问题(可能使用setTimeout
来模拟异步数据填充)。堆栈代码段支持React,包括JSX。嗯…我也有同样的错误。。。this.props.letters.map不是函数,这意味着this.props.letters中的任何内容都不是数组。