React 中 this指向問題

在寫react mobx的demo時鹊汛,給checkbox 添加一個onChange事件蒲赂,并且忘記在constructorbind事件,導(dǎo)致this指向錯誤

import React from 'react'
import { observer } from 'mobx-react'

@observer
class Todo extends React.Component {
    constructor(props){
        super(props);
    // this.toggleFinished = this.toggleFinished.bind(this)
    // this.removeTodo = this.removeTodo.bind(this)
}

toggleFinished() {
    console.log(this)    // undefined刁憋,因?yàn)椴]有綁定this
    const todo = this.props.todo;
    todo.finished = !todo.finished
}
removeTodo = () => {
    const i = this.props.i;
    // const AppState = this.props.AppState;
    this.props.AppState.todoList.splice(i,1)
}

render(){
    const todo = this.props.todo;
    return (
        <li>
            <input type="checkbox" checked={todo.finished} onChange={this.toggleFinished} />
            id:{todo.id},task:{todo.task},finished:{todo.finished?'true':'false'}
            <button onClick={this.removeTodo}>remove it</button>
        </li>
    )
}
}

export default Todo
image.png

報錯原因: this并沒有綁定到Todo
官方文檔React處理事件中這么解釋:在JSX回調(diào)中你必須注意 this 的指向滥嘴。 在 JavaScript 中,類方法默認(rèn)沒有 綁定 的至耻。如果你忘記綁定 this.handleClick 并將其傳遞給onClick若皱,那么在直接調(diào)用該函數(shù)時,this 會是 undefined 尘颓。


解決方法:
1.在constructor中綁定this

constructor(props){
    super(props);
    this.toggleFinished = this.toggleFinished.bind(this)  //  將this綁定到當(dāng)前對象
    // this.removeTodo = this.removeTodo.bind(this)
}

2.使用箭頭函數(shù) ()=>

toggleFinished =() =>{
    console.log(this) // Todo...
    // const todo = this.props.todo;
    // todo.finished = !todo.finished
}

箭頭函數(shù)() this指向

MDN解釋:在箭頭函數(shù)中是尖,this與封閉詞法上下文的this保持一致。在全局代碼中泥耀,它將被設(shè)置為全局對象饺汹。
在本章中,也就是this指向外層調(diào)用者 Todo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痰催,一起剝皮案震驚了整個濱河市兜辞,隨后出現(xiàn)的幾起案子迎瞧,更是在濱河造成了極大的恐慌,老刑警劉巖逸吵,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凶硅,死亡現(xiàn)場離奇詭異,居然都是意外死亡扫皱,警方通過查閱死者的電腦和手機(jī)足绅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來韩脑,“玉大人氢妈,你說我怎么就攤上這事《味啵” “怎么了首量?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長进苍。 經(jīng)常有香客問我加缘,道長,這世上最難降的妖魔是什么觉啊? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任拣宏,我火速辦了婚禮,結(jié)果婚禮上杠人,老公的妹妹穿的比我還像新娘勋乾。我一直安慰自己,他們只是感情好搜吧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布市俊。 她就那樣靜靜地躺著杨凑,像睡著了一般滤奈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撩满,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天蜒程,我揣著相機(jī)與錄音,去河邊找鬼伺帘。 笑死昭躺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伪嫁。 我是一名探鬼主播领炫,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼张咳!你這毒婦竟也來了帝洪?” 一聲冷哼從身側(cè)響起似舵,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葱峡,沒想到半個月后砚哗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砰奕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年蛛芥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片军援。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仅淑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盖溺,到底是詐尸還是另有隱情漓糙,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布烘嘱,位于F島的核電站昆禽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蝇庭。R本人自食惡果不足惜醉鳖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哮内。 院中可真熱鬧盗棵,春花似錦、人聲如沸北发。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琳拨。三九已至瞭恰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狱庇,已是汗流浹背惊畏。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留密任,地道東北人颜启。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像浪讳,于是被迫代替她去往敵國和親缰盏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容