在我的componentDidMount方法中,我将数据划分为两个单独的列表,然后设置两个列表的状态,以便我的UI可以呈现它们。我有两个问题:
componentDidMount()方法是对从API调用接收到的列表进行分区的合适位置吗?
代码是否有可能在lodash完成分区之前尝试设置状态(可以说这是一个很长的列表)?如果是这样,我尝试了.then()回调,但是我收到一条错误消息,说.then()不是函数。
componentDidMount(){ const {data} = this.props;
let currentTime = moment();
let sortedPosts = _.partition(this.state.listViewData, function(o) {
return (o.isActive || (new Date(o.scheduledActiveEnd)) < currentTime);
}).then(() => {
this.setState({
futureListViewData: sortedPosts[0],
currentListViewData: sortedPosts[1]
})
})
答案 0 :(得分:2)
componentDidMount()方法是对从API调用接收到的列表进行分区的合适位置吗?
是的,componentDidMount是放置异步代码(例如获取数据然后解析响应)的好地方。
代码是否有可能在lodash完成分区之前尝试设置状态(可以说这是一个很长的列表)?如果是这样,我尝试了.then()回调,但收到一条错误消息,说.then()不是函数。
否,_.partition是同步的。它返回一个数组数组,而不是一个promise。如果在大型数组上调用_.partition,则线程将阻塞,直到完成对数组的分区为止。