功能能開關setter和getter

更新於 2024/06/04閱讀時間約 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能把狀態改變時需做的事情包裝起來,讓外部只需簡單修改參數就能達到預想的效果。如果有功能有多個狀態,並且互相影響,實作時就可以考慮該做法。

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


avatar-img
4會員
9內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
s_SoNg的沙龍 的其他內容
在程式任何地方都能修改各種react組件狀態的做法分享
網格擴散可以就像剪紙一樣,把紙上想要的部分剪下來。 通過模型的一個點,找到周圍相鄰的點;其他點又能找到周圍相鄰的點,就像水波一樣擴散出去。 許多3D的算法,如裁切、干涉深度偵測等都會用到。
在THREE r125版本開始,THREE.Geometry就被棄用。 自己的職位是IT前端,由於套件安全性的原因,需要對THREE套件進行升級,但自己所在公司的程式內還有大量的Geometry。 因為前輩們開發了一些複雜強大的算法,如果用Threejs官方建議的正規方法,自己必須要看懂並且改寫算法
在程式任何地方都能修改各種react組件狀態的做法分享
網格擴散可以就像剪紙一樣,把紙上想要的部分剪下來。 通過模型的一個點,找到周圍相鄰的點;其他點又能找到周圍相鄰的點,就像水波一樣擴散出去。 許多3D的算法,如裁切、干涉深度偵測等都會用到。
在THREE r125版本開始,THREE.Geometry就被棄用。 自己的職位是IT前端,由於套件安全性的原因,需要對THREE套件進行升級,但自己所在公司的程式內還有大量的Geometry。 因為前輩們開發了一些複雜強大的算法,如果用Threejs官方建議的正規方法,自己必須要看懂並且改寫算法
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
幾日後觀世音菩薩第二次來接,老居士沒有驚動身邊的人,獨自不停地念誦合掌,旁邊的人聽到她說:「極樂世界好美哦!好多花啊!」這次依然是因為大法王請觀世音菩薩不要接走老居士。記者採訪時老居士雖然不願多講話但還是很負責任地一定要親自錄音:「我看見了觀世音菩薩空的青衣,極樂世界好美啊!還有樓臺亭閣,好多花啊!
Thumbnail
OpenAI宣布將「自訂指令」功能推廣給所有用戶,不論是免費用戶還是付費用戶。這個功能原本在七月份推出,當時只對ChatGPT Plus訂閱用戶進行測試,讓他們可以調教AI聊天機器人,讓回答更合心意。 這其實是一個超方便的功能,省了大家不少時間。以前每次跟聊天機器人聊天,都要一遍又一遍地輸入同
Thumbnail
這是 30 天寫作挑戰的第 23 天。今天是「思考產品功能時,能提升思考品質的 Checklist」系列最後一篇。今天要分享的是: 思考產品功能時,能提升思考品質的 Checklist 10–12 30 天寫作挑戰:連續 30 天,每天都會從 ChatGPT 、生活中的靈感或是網友提問中,選出一個可
Thumbnail
這是 30 天寫作挑戰的第 22 天。今天要分享的是:思考產品功能時,能提升思考品質的 Checklist 07–09
Thumbnail
這是 30 天寫作挑戰的第 21 天。今天要分享的是:思考產品功能時,能提升思考品質的 Checklist 04–06
Thumbnail
這是 30 天寫作挑戰的第 20 天。今天開始要跟大家分享一系列的「思考產品功能時,能提升思考品質的 Checklist」。這個系列是先前在商業思維學院上課時所做的作業,作業是要我們提出自己認為在思考產品功能時,需要檢查的各個項目,以下我列出的檢查清單,分享給各位產品經理、設計師、工程師們。
Thumbnail
「肌少症」是近年最常被關注的高齡健康問題之一,據研究顯示,40歲以後,人體肌肉量會以每十年減少8%的速度流失;70歲後則以每十年減少15%的速度加速流失,除了前面所提到漏尿、跌倒等問題,或是不明痠痛、許多日常動作變得遲緩等,都有可能是「肌少症」所引發的,甚至還可能引發代謝問題,及心血管方面的疾病。
Thumbnail
設計,就是在『有限版面』,置入『不同元素』的『組合』遊戲! 我們最傷腦筋的是:要如何組合,才能順眼好看? 我們這次介紹PPT的小功能:柔邊。 它能讓兩個元素的組合,更加『水乳交融』拼貼合成,模糊彼此的交界處!
Thumbnail
根據海姊的提議、先拿回已經搬出去兩個多月,但是堅持不歸還的章魚王手裡的大門門卡,於是童蘿以大樓的防疫規定,要已經不是大樓住戶的章魚王歸還門卡。不過屎尿王哪有可能乖乖的就範,硬是推託了好一陣子才願意把大門門卡還回來,這段期間童蘿也只有沈住氣跟他慢慢周旋。 「怎麼回?」我靠近電話問。 「他居然說:
Thumbnail
抓住最小眾就是抓住最大眾。我們都能簡單的創造極小社群建立工具,關鍵是,要如何讓這些極小社群能自動壯大,進而為所有人帶來無限機會---覺醒Blog
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
幾日後觀世音菩薩第二次來接,老居士沒有驚動身邊的人,獨自不停地念誦合掌,旁邊的人聽到她說:「極樂世界好美哦!好多花啊!」這次依然是因為大法王請觀世音菩薩不要接走老居士。記者採訪時老居士雖然不願多講話但還是很負責任地一定要親自錄音:「我看見了觀世音菩薩空的青衣,極樂世界好美啊!還有樓臺亭閣,好多花啊!
Thumbnail
OpenAI宣布將「自訂指令」功能推廣給所有用戶,不論是免費用戶還是付費用戶。這個功能原本在七月份推出,當時只對ChatGPT Plus訂閱用戶進行測試,讓他們可以調教AI聊天機器人,讓回答更合心意。 這其實是一個超方便的功能,省了大家不少時間。以前每次跟聊天機器人聊天,都要一遍又一遍地輸入同
Thumbnail
這是 30 天寫作挑戰的第 23 天。今天是「思考產品功能時,能提升思考品質的 Checklist」系列最後一篇。今天要分享的是: 思考產品功能時,能提升思考品質的 Checklist 10–12 30 天寫作挑戰:連續 30 天,每天都會從 ChatGPT 、生活中的靈感或是網友提問中,選出一個可
Thumbnail
這是 30 天寫作挑戰的第 22 天。今天要分享的是:思考產品功能時,能提升思考品質的 Checklist 07–09
Thumbnail
這是 30 天寫作挑戰的第 21 天。今天要分享的是:思考產品功能時,能提升思考品質的 Checklist 04–06
Thumbnail
這是 30 天寫作挑戰的第 20 天。今天開始要跟大家分享一系列的「思考產品功能時,能提升思考品質的 Checklist」。這個系列是先前在商業思維學院上課時所做的作業,作業是要我們提出自己認為在思考產品功能時,需要檢查的各個項目,以下我列出的檢查清單,分享給各位產品經理、設計師、工程師們。
Thumbnail
「肌少症」是近年最常被關注的高齡健康問題之一,據研究顯示,40歲以後,人體肌肉量會以每十年減少8%的速度流失;70歲後則以每十年減少15%的速度加速流失,除了前面所提到漏尿、跌倒等問題,或是不明痠痛、許多日常動作變得遲緩等,都有可能是「肌少症」所引發的,甚至還可能引發代謝問題,及心血管方面的疾病。
Thumbnail
設計,就是在『有限版面』,置入『不同元素』的『組合』遊戲! 我們最傷腦筋的是:要如何組合,才能順眼好看? 我們這次介紹PPT的小功能:柔邊。 它能讓兩個元素的組合,更加『水乳交融』拼貼合成,模糊彼此的交界處!
Thumbnail
根據海姊的提議、先拿回已經搬出去兩個多月,但是堅持不歸還的章魚王手裡的大門門卡,於是童蘿以大樓的防疫規定,要已經不是大樓住戶的章魚王歸還門卡。不過屎尿王哪有可能乖乖的就範,硬是推託了好一陣子才願意把大門門卡還回來,這段期間童蘿也只有沈住氣跟他慢慢周旋。 「怎麼回?」我靠近電話問。 「他居然說:
Thumbnail
抓住最小眾就是抓住最大眾。我們都能簡單的創造極小社群建立工具,關鍵是,要如何讓這些極小社群能自動壯大,進而為所有人帶來無限機會---覺醒Blog