功能能開關setter和getter

閱讀時間約 5 分鐘

setter和getter讓我們能在存取物件的參數時額外做一些事情,下面將展示一個範例來體現其簡單實用。

設定參數時順便刷新頁面

下面簡單的類別,讓外部修改lightSwitch參數就能刷新React組件,原因是在setter中搭配了React ViewRerender架構方法來刷新頁面。

class SwitchController {
constructor() {
this._lightSwitch = false;
}

get lightSwitch() {
return this._lightSwitch;
}

set lightSwitch(boolean) {
if (this._lightSwitch == boolean) return;
this._lightSwitch = boolean;

    ViewRerender.all.forceRerender(); //刷新頁面
}
}

讓開關影響開關

下面加入的總開關,不同之處僅在第17行,關閉時會順帶關閉lightSwitch。

第34行利用getter,讓外部更方便存取燈的狀態。

class SwitchController {
constructor() {
this._mainGate = false;
this._lightSwitch = false;
}

get mainGate() {
return this._mainGate;
}

//總開關,關閉後還會關閉lightSwitch子開關
set mainGate(boolean) {
if (this._mainGate == boolean) return;
this._mainGate = boolean;

//關閉時會順帶關閉lightSwitch
if (boolean == false) this.lightSwitch = false;

ViewRerender.all.forceRerender();
}

get lightSwitch() {
return this._lightSwitch;
}

set lightSwitch(boolean) {
if (this._lightSwitch == boolean) return;
this._lightSwitch = boolean;

ViewRerender.all.forceRerender();
}

//讓外部能只讀取isLight參數,就知道燈是否亮起
get isLight() {
return this.mainGate && this.lightSwitch;
}
}

所見及所得,把參數改成什麼,狀態就會變成什麼。

上面的SwitchController完成後,下面的渲染組件只需存取參數,就能完成狀態的改變與頁面的刷新。

import React, { useEffect, useReducer } from "react";
import SwitchController from "../utils/SwitchController";

const Main = () => {
const { mainGate, lightSwitch, isLight } = SwitchController;

return (
<div>
<Switch
checked={mainGate}//讀取mainGate
onChange={() => SwitchController.mainGate = !mainGate}//設定mainGate
/>
<Switch
checked={lightSwitch}//讀取lightSwitch
onChange={() => SwitchController.lightSwitch = !lightSwitch}//設定lightSwitch
/>
{isLight ? "light on" : "light off"}//讀取isLight
</div>
);
};

完整範例:功能開關setter和getter

結論

setter和getter能把狀態改變時需做的事情包裝起來,讓外部只需簡單修改參數就能達到預想的效果。如果有功能有多個狀態,並且互相影響,實作時就可以考慮該做法。

如果大家有其他好的用法,歡迎在下方留言。


3會員
5內容數
留言0
查看全部
發表第一個留言支持創作者!
s_SoNg的沙龍 的其他內容
THREEjs BufferGeometry網格擴散
閱讀時間約 2 分鐘
React ViewRerender架構
閱讀時間約 1 分鐘
你可能也想看
《眾聲日報》2004年7月15日:無呼吸功能 卻能說話幾日後觀世音菩薩第二次來接,老居士沒有驚動身邊的人,獨自不停地念誦合掌,旁邊的人聽到她說:「極樂世界好美哦!好多花啊!」這次依然是因為大法王請觀世音菩薩不要接走老居士。記者採訪時老居士雖然不願多講話但還是很負責任地一定要親自錄音:「我看見了觀世音菩薩空的青衣,極樂世界好美啊!還有樓臺亭閣,好多花啊!
Thumbnail
avatar
cultivator
2023-11-20
免費用戶也能玩了!ChatGPT推出「自訂指令」功能,現在全面開放! OpenAI宣布將「自訂指令」功能推廣給所有用戶,不論是免費用戶還是付費用戶。這個功能原本在七月份推出,當時只對ChatGPT Plus訂閱用戶進行測試,讓他們可以調教AI聊天機器人,讓回答更合心意。 這其實是一個超方便的功能,省了大家不少時間。以前每次跟聊天機器人聊天,都要一遍又一遍地輸入同
Thumbnail
avatar
wang alan
2023-08-17
思考產品功能時,能提升思考品質的 Checklist 10–12這是 30 天寫作挑戰的第 23 天。今天是「思考產品功能時,能提升思考品質的 Checklist」系列最後一篇。今天要分享的是: 思考產品功能時,能提升思考品質的 Checklist 10–12 30 天寫作挑戰:連續 30 天,每天都會從 ChatGPT 、生活中的靈感或是網友提問中,選出一個可
Thumbnail
avatar
Larry Chien
2023-06-10
思考產品功能時,能提升思考品質的 Checklist 07–09這是 30 天寫作挑戰的第 22 天。今天要分享的是:思考產品功能時,能提升思考品質的 Checklist 07–09
Thumbnail
avatar
Larry Chien
2023-06-09
思考產品功能時,能提升思考品質的 Checklist 04–06這是 30 天寫作挑戰的第 21 天。今天要分享的是:思考產品功能時,能提升思考品質的 Checklist 04–06
Thumbnail
avatar
Larry Chien
2023-06-08
思考產品功能時,能提升思考品質的 Checklist 01–03這是 30 天寫作挑戰的第 20 天。今天開始要跟大家分享一系列的「思考產品功能時,能提升思考品質的 Checklist」。這個系列是先前在商業思維學院上課時所做的作業,作業是要我們提出自己認為在思考產品功能時,需要檢查的各個項目,以下我列出的檢查清單,分享給各位產品經理、設計師、工程師們。
Thumbnail
avatar
Larry Chien
2023-06-07
易跌倒、漏尿和肌少症有關?適合的運動能提升功能肌力「肌少症」是近年最常被關注的高齡健康問題之一,據研究顯示,40歲以後,人體肌肉量會以每十年減少8%的速度流失;70歲後則以每十年減少15%的速度加速流失,除了前面所提到漏尿、跌倒等問題,或是不明痠痛、許多日常動作變得遲緩等,都有可能是「肌少症」所引發的,甚至還可能引發代謝問題,及心血管方面的疾病。
Thumbnail
avatar
優照護
2023-02-08
一個PPT裡的小小功能,能讓你設計力起飛喔!|9種柔邊技巧教學,上班族必GET!(內附教學影片)設計,就是在『有限版面』,置入『不同元素』的『組合』遊戲! 我們最傷腦筋的是:要如何組合,才能順眼好看? 我們這次介紹PPT的小功能:柔邊。 它能讓兩個元素的組合,更加『水乳交融』拼貼合成,模糊彼此的交界處!
Thumbnail
avatar
小咖PPT曹學斌
2022-02-08
離婚並不可恥~還能停損! —— (5)攻防開始根據海姊的提議、先拿回已經搬出去兩個多月,但是堅持不歸還的章魚王手裡的大門門卡,於是童蘿以大樓的防疫規定,要已經不是大樓住戶的章魚王歸還門卡。不過屎尿王哪有可能乖乖的就範,硬是推託了好一陣子才願意把大門門卡還回來,這段期間童蘿也只有沈住氣跟他慢慢周旋。 「怎麼回?」我靠近電話問。 「他居然說:
Thumbnail
avatar
Becky T. 純文字
2021-12-22
小功能就能讓部落格平台成為作者貼文推廣的最大幫手抓住最小眾就是抓住最大眾。我們都能簡單的創造極小社群建立工具,關鍵是,要如何讓這些極小社群能自動壯大,進而為所有人帶來無限機會---覺醒Blog
Thumbnail
avatar
創翼
2020-07-25