軟件工程開發過程當中遇到的困難及其解決

本次軟件工程課,咱們小組所選的課題是運用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對組件渲染的方式也着實讓我意想不到,這個問題的解決也讓我獲益匪淺。學習

相關文章
相關標籤/搜索