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


本次軟件工程課,我們小組所選的課題是運用react-native框架進行Android開發。由於之前沒有選過Android開發相關的課程,這次對我而言又是接觸一門新語言,因此也遇到了一定的問題。

react-native中最重要的應該就是它的生命周期函數了,諸如componentWillUpdate這樣的函數對於狀態改變有很大的影響,在最初的開發之中我沒有過多關注這些函數,但馬上就感到了力不從心,於是便花了很久的時間去了解這個函數以及整個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對組件渲染的方式也着實讓我意想不到,這個問題的解決也讓我獲益匪淺。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM