我有一个加载功能,可以将我的数据加载到我的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();
}
取消注释将导致我的应用程序按钮和渲染停止工作。
答案 0 :(得分:0)
3件事:
首先,如果指定的字段为空或不存在,则getParam缺少作为默认值的参数:
var name = this.props.navigation.getParam('name', 'defaultName')
有了名称,您不必一直调用它来访问阵列单元。
第二,你是什么window.contents?
最后,如果组件的状态或属性已更改,则每次this.setState()调用都会导致视图呈现。您应该在componentDidMount()
中调用过程,是的,this.props.navigation
应该可以在componentDidMount()
中访问,因为您的组件位于我想的导航器中。