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