应该在排序功能后在回调中设置状态?

时间:2018-08-10 00:31:38

标签: javascript react-native callback lodash

在我的componentDidMount方法中,我将数据划分为两个单独的列表,然后设置两个列表的状态,以便我的UI可以呈现它们。我有两个问题:

  1. componentDidMount()方法是对从API调用接收到的列表进行分区的合适位置吗?

  2. 代码是否有可能在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]
  })
})

1 个答案:

答案 0 :(得分:2)

  

componentDidMount()方法是对从API调用接收到的列表进行分区的合适位置吗?

是的,componentDidMount是放置异步代码(例如获取数据然后解析响应)的好地方。

  

代码是否有可能在lodash完成分区之前尝试设置状态(可以说这是一个很长的列表)?如果是这样,我尝试了.then()回调,但收到一条错误消息,说.then()不是函数。

否,_.partition是同步的。它返回一个数组数组,而不是一个promise。如果在大型数组上调用_.partition,则线程将阻塞,直到完成对数组的分区为止。