在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ react底層是如何實現(xiàn)對this.state監(jiān)聽的

react底層是如何實現(xiàn)對this.state監(jiān)聽的

如題,謝謝解答


可能沒有問清楚
this.state的數(shù)據(jù)變化時,是如何觸發(fā)組件更新的。react是如何知道數(shù)據(jù)變化了

回答
編輯回答
離人歸
react是如何知道數(shù)據(jù)變化了

它不知道,所以才叫你用 setState

2018年9月23日 07:14
編輯回答
替身

1L 說的是對的,因為所有對于state的修改,全部都是通過setState方法進行的。

  • 怎樣算是一個react組件,繼承React.Component
  • 繼承React.Component做了什么?React.Compnent包含了setState的方法
  • setState的方法有什么用,通過setState控制維護了一個組件的state,所有想要修改state的操作,必須通過這個方法。

如果你想知道數(shù)據(jù)變化了,監(jiān)聽數(shù)據(jù)的變化?那你需要從數(shù)據(jù)的根源做起,mobx就是監(jiān)聽數(shù)據(jù)的變化,可以去看看源碼。

function makePropertyObservableReference(propName) {
            let valueHolder = this[propName]
            const atom = new Atom("reactive " + propName)
            Object.defineProperty(this, propName, {
                configurable: true,
                enumerable: true,
                get: function() {
                    atom.reportObserved()
                    return valueHolder
                },
                set: function set(v) {
                    if (!isForcingUpdate && isObjectShallowModified(valueHolder, v)) {
                        valueHolder = v
                        skipRender = true
                        atom.reportChanged()
                        skipRender = false
                    } else {
                        valueHolder = v
                    }
                }
            })
        }
2018年4月28日 00:42
編輯回答
胭脂淚

原理其實很簡單,不存在監(jiān)聽。

React規(guī)定了所有的state的改變都必須要通過setState方法,不然的話無法觸發(fā)React自身完整的更新機制。所以很簡單,只要在setState方法里寫上所有的對應更新機制或者觸發(fā)其它的生命周期就可以了。

2017年3月2日 15:20