為什麼Vue中當前組件獲取到其他組件的data都是不能直接修改的,而是要間接調用那個組件的方法來修改?
想請問一下各位前端大佬,我覺得直接修改更方便呀,這樣設計是為了什麼,可以不這樣設計嗎?
如果你嚴格按照這個規則來設計程序
那麼有朝一日你想看一下有哪些地方修改了某個組件的某個屬性 只要debug一下那個方法就可以了
不過vue的手段不止於此
你也可以在watch中監聽屬性達到debug的目的
相比之下還是函數的debug更加清晰
你是說props不允許修改這個事嗎?
因為一個變數可以傳遞給多個子組件,如果你悄悄的修改它,導致其他子組件的props也跟著變了,這對於調試是個麻煩事。並不是說Vue做不到,而是Vue要遵守一些範式。
想修改props,只在子組件內改是允許改的,前提是你要先克隆一份。
寫起來表面上是更方便,然後某天有個bug,和A組件中的一個狀態有關,然後有其他100個組件會在A組件外直接修改這個狀態,你就慢慢排查去吧
為了追蹤數據歷史狀態,這樣可以提供更好的debug和更好的維護性。
其實vue種的設計很多都符合這種思想,比如vuex中的mutaition。
數據的修改應該更容易被追蹤和觀察。這點vuetool就體現出來了。
你朋友知道你有一百萬放在你的銀行卡里,他有辦法不經過你就把這一百萬取出來嗎?
可以直接修改的, 不過你按照規範的話 可以從vue devtool 受益。
我個人也認為比較麻煩,我習慣把js部分封裝成類,然後把類的實例掛載到data,然後 直接xxx.xxx 或者 xxx.x()去調用。子組件要用就把實例傳遞下去。
這都不需要學習設計模式,你可以從外部修改類私有成員嗎?道理是一樣的。
自由不加限制,帶來的一定是強者對弱者的剝削。
這樣不會亂
不理解你的問題,可以直接修改的
主要是為了可維護性。你如果代碼不會和其他人協作,也不用維護,沒啥問題。
推薦閱讀: