渲染响应本机后调用的函数

时间:2018-07-29 10:15:45

标签: listview react-native components delay rerender

我有一个加载功能,可以将我的数据加载到我的ListView数据源中,并且您可能知道ListView不会总是随着状态的改变而重新呈现,我需要强制更新它,这个加载功能确实可以很好地被按钮调用,但是我希望它能够自动加载,但在componentwill / did挂载函数中无法调用forceupdate怎么办?我只希望渲染后稍稍延迟即可调用我的函数。问题是this.props.navigation不是在渲染和不能在componentwill / did挂载中使用的对象。

 //   UNSAFE_componentWillMount() {
//   this.makeScene();
// }

makeScene(){
var count = Object.keys(window.contents[this.props.navigation.getParam('name')]).length;
for(let i = 0 ; i < count ; i ++){
  global.subnum[i] = i;
  global.lowersubjects[i] = window.contents[this.props.navigation.getParam('name')][i].subject;
  global.lowerdescriptions[i] = window.contents[this.props.navigation.getParam('name')][i].description;
  global.lowerimageurl[i] = window.contents[this.props.navigation.getParam('name')][i].imageurl;
  global.author[i] = window.contents[this.props.navigation.getParam('name')][i].author;
  global.eventdate[i] = window.contents[this.props.navigation.getParam('name')][i].eventdate;
}
this.setState({
  subnum : global.subnum
});
this.forceUpdate();
}    

取消注释将导致我的应用程序按钮和渲染停止工作。

1 个答案:

答案 0 :(得分:0)

3件事:

首先,如果指定的字段为空或不存在,则getParam缺少作为默认值的参数:

var name = this.props.navigation.getParam('name', 'defaultName')

有了名称,您不必一直调用它来访问阵列单元。

第二,你是什么window.contents?

最后,如果组件的状态或属性已更改,则每次this.setState()调用都会导致视图呈现。您应该在componentDidMount()中调用过程,是的,this.props.navigation应该可以在componentDidMount()中访问,因为您的组件位于我想的导航器中。