使用簡(jiǎn)書(shū)的第一天,想把以前七零八落的總結(jié)整合一下
此練習(xí)github地址
今天下午是這個(gè)禮拜里最充實(shí)的一個(gè)下午,和楊?lèi)傔€有邱敏敏一起結(jié)隊(duì)編程,真的是超嗨超開(kāi)森?。?!
我們一起練習(xí)了react和redux結(jié)合寫(xiě) todolist項(xiàng)目,我們先配置了webpack和 server,初始化一個(gè)組件,保證可以訪(fǎng)問(wèn)到預(yù)定的端口并顯示這個(gè)組件中渲染的東西。然后我們定義了一個(gè)store,使用并引入了Provider,前面都比較順。
我們遇到的第一個(gè)錯(cuò)誤就是在todo-list.js中定義了TodoList組件,忘記了用export將其導(dǎo)出,在app.js里的 App組件中直接調(diào)用,瀏覽器中并不會(huì)報(bào)TodoList的錯(cuò)誤,而是說(shuō)檢查app里render的使用;因?yàn)橹暗?strong>小步測(cè)試并書(shū)寫(xiě)代碼保證了App里的代碼都是正確的,所以我們能直接定位到TodoList里,發(fā)現(xiàn)問(wèn)題并添加export,使用git提交代碼。
接下來(lái)我們利用connect,借助其參數(shù)mapStateToProps和mapDispatch將TodoList從一個(gè)展示組件包裝為一個(gè)容器組件,將reducer里傳回的state中的信息渲染到頁(yè)面上,這里我們發(fā)現(xiàn)當(dāng)傳回的東西是一個(gè)數(shù)組時(shí),只能通過(guò)console.log打印它的信息而不能直接渲染,我們可以使用map等合適的方法打印我們想要的信息。功能完成后提交代碼。
然后我們?cè)?code>add-todo里定義了AddTodo組件,這個(gè)組件里主要涉及添加功能,所以要有一個(gè)add方法,我們發(fā)現(xiàn),當(dāng)我們直接在展示組件中使用this.props.add,沒(méi)有定義并實(shí)現(xiàn)這個(gè)函數(shù)時(shí),按理說(shuō)時(shí)應(yīng)該報(bào)錯(cuò)的,因?yàn)闆](méi)有這個(gè)方法,但是沒(méi)有報(bào)錯(cuò),后來(lái)我們?cè)诠倬W(wǎng)上找到原因是沒(méi)有使用propsTypes來(lái)判斷是否接受到這個(gè)方法。恩,棒棒噠。
接下來(lái)我們當(dāng)然是要添加刪除功能了,當(dāng)點(diǎn)擊刪除時(shí),我們會(huì)將REMOVE這個(gè)類(lèi)型和要?jiǎng)h除的對(duì)象的index通過(guò)dispatch傳給reducer去處理。
一開(kāi)始一切都OK。事情發(fā)生在一個(gè)“陽(yáng)光明媚”的下午,當(dāng)我們添加all,active,completed選項(xiàng)時(shí),可怕的現(xiàn)象發(fā)生了;我添加了1,2,3;將1選中為已完成,然后點(diǎn)擊active,顯示2,3;恩這是對(duì)的,當(dāng)我刪除2時(shí),它把1給刪了。這一切的背后到底隱藏著怎樣不為人只的秘密,究竟時(shí)人性的扭曲還是道德的淪喪!??!
哦好吧,讓我來(lái)揭開(kāi)神秘的面紗,是因?yàn)槲以趧h除時(shí)傳送了index來(lái)標(biāo)識(shí)這個(gè)對(duì)象,而all,active,completed會(huì)因?yàn)槠錉顟B(tài)的不同來(lái)篩選符合條件的對(duì)象來(lái)顯示,所以我選中了1,在點(diǎn)擊active時(shí),2和3的下標(biāo)已經(jīng)發(fā)生變化了,所以,當(dāng)我點(diǎn)擊刪除2時(shí),它把下標(biāo)0傳送給了reducer,然后就把下標(biāo)為0的對(duì)象1給刪除了。哈哈好一個(gè)移花接木,然而還是逃不過(guò)我們的火眼金睛?。?!然后我們?yōu)槊總€(gè)對(duì)象設(shè)置了id,每次將對(duì)象的id傳送,然后通過(guò)Array.prototype.find方法找到符合這個(gè)id的對(duì)象,取到它的index值,然后將它刪除~~
接下來(lái)我們要實(shí)現(xiàn)clear completed(清除已完成)這個(gè)功能,我們將這個(gè)類(lèi)型通過(guò)dispatch傳送給reducer,然后用Array.prototype.fliter函數(shù)選出其中isDone為false(也就是沒(méi)有做的事情)的對(duì)象,然回給todolist去顯示。這里我們還遇到了一個(gè)問(wèn)題,就是在點(diǎn)擊clear completed時(shí),它的確實(shí)現(xiàn)了刪除已完成這個(gè)功能,但顯示出來(lái)的列表的空的,必須再次點(diǎn)擊all,active才能顯示信息。這是為什么呢,為什么呢?哦我靈機(jī)一動(dòng),想起來(lái)我在之前對(duì)all,active,completed篩選狀態(tài)值時(shí)用if,else做判斷,因?yàn)橹挥腥N情況,所以我第三種completed的判斷條件直接是else,所以導(dǎo)致這個(gè)問(wèn)題。然后我想清除已完成后剩下的都是未完成,所以我只需要將all寫(xiě)在最后一個(gè)判斷條件里就好了,好的,大功告成~~
真的真的超開(kāi)心,完成的時(shí)候感覺(jué)超幸福哈哈~~
今天周天,補(bǔ)上昨天(8月20)的總結(jié),哦總結(jié),昨天太懶了,沒(méi)寫(xiě)你,2016/8/21 11:45,sorry,晚安!
哦天哪,我剛才一直沒(méi)網(wǎng),不過(guò)我在我翔哥的幫助下解決了這個(gè)問(wèn)題,是這樣的:我在shell下 ping www.baidu.com,顯示未知的主機(jī)名,問(wèn)題的原因是我的主機(jī)所訪(fǎng)問(wèn)的地址并非域名解析服務(wù)器的地址。我進(jìn)入/目錄下訪(fǎng)問(wèn)etc/resolv.conf, 看到nameservers 127.0.0.1,此地址為本地回環(huán)地址,所以我要配置域名解析服務(wù)器的IP地址為google的地址,所以我修改nameservers 127.0.0.1上方增添nameservers 114.114.114.114。這個(gè)時(shí)候我發(fā)現(xiàn)我無(wú)法修改其內(nèi)容,所以我用sudo su命令將自己升級(jí)成super用戶(hù),然后我就為所欲為哈哈,我有網(wǎng)了~~啦啦啦提交總結(jié)ing~~