本次软件工程课,咱们小组所选的课题是运用react-native框架进行Android开发。因为以前没有选过Android开发相关的课程,此次对我而言又是接触一门新语言,所以也遇到了必定的问题。react
react-native中最重要的应该就是它的生命周期函数了,诸如componentWillUpdate这样的函数对于状态改变有很大的影响,在最初的开发之中我没有过多关注这些函数,但立刻就感到了力不从心,因而便花了好久的时间去了解这个函数以及整个react-native的生命周期。编程
//生命周期图react-native
在这个过程当中,我发现react-native中的改变状态函数——setState并非瞬间改变函数的值,它会在整个运行状态中接受全部的状态改变,而后进行询问shouldComponentUpdate决定是否改变值。在这里也遇到了一个新的问题,在componentWillUpdate中,咱们每每会进行state的改变,这致使程序会进入一种无限的死循环,即componentWillUpdate——》setState(状态改变)——》componentWillUpdate。在这里咱们采用了两种解决方法:设定变量isMount,其含义是已经进行更新,相似于以前面向对象课程中学到的synchronize锁。在每次componentWillUpdate中进行询问,而后在执行componentWillUpdate以后进行“锁”操做,而后在componentDidUpdate中进行锁的释放,从而保证每次componentWillUpdate以后不会再对当前状态进行重复渲染。数组
在我我的的编程过程当中,我遇到了一个以前历来没有考虑过的问题。在以往的语言学习过程当中,当我想将数组中的某一个元素删除的时候,并不会有什么问题。如将[0,1,2,3,4,5]中下标为2的元素删掉,数组就会变成[0,1,3,4,5],即使数组中的元素是object也不会有问题。而在react-native中,当数组中的元素是本身所编写的组件时,删除一个组件就会出现必定的问题。我会具体到当时出现的问题进行描述。在“投票”功能中,“问题”和“选项”都是我本身写的组件,原始目标是超过预设值的“选项”都可以删除,然而就是删除致使了问题的发生。图一中的选项三删除以后,选项四的值竟然变成了本来选项三的值。框架
-----------------------------------------------------------分割线-----------------------------------------------------------函数
最初我认为这是由于删除功能出问题,只是将最后的选项删除了,debug以后发现并非这样。在图一的状态中,array数组中有四个option,通过删除函数以后变成了三个option。array的状态从[op1,op2,op3,op4]变成了[op1,op2,op4],在进行array的渲染以后,程序并非简单的删掉了option3,而是将op4的props赋值给了本来的op3。在最初我并无考虑到props会改变这个状况,正是由于这一点才致使了程序的错误,实在是了解的太少致使的错误。与此同时,react-native对组件渲染的方式也着实让我意想不到,这个问题的解决也让我获益匪浅。学习