課程
/前端開發(fā)
/React.JS
/在React中使用Redux數(shù)據(jù)流
state.id為什么要和action.id作比較,這個地方不太明白
2017-01-02
源自:在React中使用Redux數(shù)據(jù)流 5-2
正在回答
不知道你懂不懂?dāng)?shù)組的map方法,如果懂可能會更好理解。
這里的reducer拆分成了todo函數(shù)與todos函數(shù)
對于todo函數(shù)來說,它希望返回一個小對象,結(jié)構(gòu)大概是這樣的
{ ????id?:?1, ????text?:?learn1111, ????completed?:?false }
而對于todos函數(shù)來說,它希望返回一個數(shù)組,里面包含著像上面差不多的一個一個小對象
[{},?{},?{},?{}]
只不過返回的這個數(shù)組跟傳進(jìn)來的數(shù)組的相比肯定有了些變動,比如這里我們點(diǎn)擊其中的一個todo,肯定希望這個todo的complete從false變成true
所以下面的todos函數(shù)里面就用了map方法,
state.map((t)?=>?todo(t,?action)?)
這里的state其實(shí)是傳進(jìn)來的數(shù)組,t是傳進(jìn)來數(shù)組中的每一個小對象,這樣每個小對象都會傳進(jìn)todo函數(shù)執(zhí)行一遍,todo函數(shù)中如果發(fā)現(xiàn)action.id !== state.id 說明這個小對象不是我們點(diǎn)擊的,那這個小對象就應(yīng)該不變,原樣返回,如果相等,則說明這是我們點(diǎn)擊的那個小對象,則這個對象中的completed屬性就應(yīng)該取反,再把這個對象返回。
比如原先是這樣的一個數(shù)組
[ {id:1,text:1,completed:false},? {id:2,text:2,completed:false},? {id:3,text:3,completed:false} ]
我們點(diǎn)擊了第二項(xiàng),
這個數(shù)組被傳進(jìn)todos函數(shù)的state中,調(diào)用state.map((t) => todo(t, action))
然后第一個對象 {id:1,text:1,completed:false} 被當(dāng)作參數(shù) t 傳入 todo(t,?action)中,發(fā)現(xiàn)點(diǎn)擊的不是這個對象,則將?{id:1,text:1,completed:false} 原樣返回,
然后第二個對象被傳入todo函數(shù)中,發(fā)現(xiàn)是被點(diǎn)擊的對象所以改變其compted屬性然后返回
{id:2,text:2,completed:true},
第三個同樣,
這樣被返回的新數(shù)組就是下面這樣的
[ {id:1,text:1,completed:false},? {id:2,text:2,completed:true},? {id:3,text:3,completed:false} ]
啰啰嗦嗦寫一大堆,不知道你能不能看得懂,順便一提,這老師講成這樣,理解不了才是正常的。。。
我想問一下,你對react了解的多嗎,我有個問題想請教下
state.id 表示reducer里面的id, 而action.id 表示操作的那條todo的id。如果不相同,則不操作,相同則是要操作的那條todo,做取反操作。 ? 不知道說沒說錯!
舉報
在react中使用redux數(shù)據(jù)流,通過一個樣例工程的開發(fā)了解具體原理
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2017-01-13
不知道你懂不懂?dāng)?shù)組的map方法,如果懂可能會更好理解。
這里的reducer拆分成了todo函數(shù)與todos函數(shù)
對于todo函數(shù)來說,它希望返回一個小對象,結(jié)構(gòu)大概是這樣的
而對于todos函數(shù)來說,它希望返回一個數(shù)組,里面包含著像上面差不多的一個一個小對象
只不過返回的這個數(shù)組跟傳進(jìn)來的數(shù)組的相比肯定有了些變動,比如這里我們點(diǎn)擊其中的一個todo,肯定希望這個todo的complete從false變成true
所以下面的todos函數(shù)里面就用了map方法,
這里的state其實(shí)是傳進(jìn)來的數(shù)組,t是傳進(jìn)來數(shù)組中的每一個小對象,這樣每個小對象都會傳進(jìn)todo函數(shù)執(zhí)行一遍,todo函數(shù)中如果發(fā)現(xiàn)action.id !== state.id 說明這個小對象不是我們點(diǎn)擊的,那這個小對象就應(yīng)該不變,原樣返回,如果相等,則說明這是我們點(diǎn)擊的那個小對象,則這個對象中的completed屬性就應(yīng)該取反,再把這個對象返回。
比如原先是這樣的一個數(shù)組
我們點(diǎn)擊了第二項(xiàng),
這個數(shù)組被傳進(jìn)todos函數(shù)的state中,調(diào)用state.map((t) => todo(t, action))
然后第一個對象 {id:1,text:1,completed:false} 被當(dāng)作參數(shù) t 傳入 todo(t,?action)中,發(fā)現(xiàn)點(diǎn)擊的不是這個對象,則將?{id:1,text:1,completed:false} 原樣返回,
然后第二個對象被傳入todo函數(shù)中,發(fā)現(xiàn)是被點(diǎn)擊的對象所以改變其compted屬性然后返回
{id:2,text:2,completed:true},
第三個同樣,
這樣被返回的新數(shù)組就是下面這樣的
啰啰嗦嗦寫一大堆,不知道你能不能看得懂,順便一提,這老師講成這樣,理解不了才是正常的。。。
2017-01-03
我想問一下,你對react了解的多嗎,我有個問題想請教下
2017-01-02
state.id 表示reducer里面的id, 而action.id 表示操作的那條todo的id。如果不相同,則不操作,相同則是要操作的那條todo,做取反操作。 ? 不知道說沒說錯!