开发React的专案也有好一阵子了,趁着有空闲的时间和大家分享一些我常会在不同专案用到的共同自订义hook function,这系列会由浅入深啦,所以先从基本的概念下手就好。
// (before return) 原生 useState 作法
const [toggle, setToggle] = useState(false)
const toggleChange = () => {
setToggle(!toggle)
}
<!-- in return -->
<div>
<h1>{toggle.toString()}</h1>
<button onClick={toggleChange}>toggle</button>
<button onClick={() => setToggle(true)}>open</button>
<button onClick={() => setToggle(false)}>close</button>
</div>
那既然要自定义hook,当然就是要像引入react hook function那样,把东西整合成一只档案,去处理想要达成的逻辑,所以可以令列一只.js档案来处理逻辑的部分:
// in useToggle.js
import { useState } from "react";
// 这里我们将toggleChange 整合进来
const useToggle = (defaultValue) => {
// 传入 defaultValue 覆盖初始值
const [value, setValue] = useState(defaultValue)
const toggleValue = (value) => {
// 这边将原有的close && open的逻辑也整合进来,只要带的值是 boolean, 让它复写
setValue(prev =>
typeof value === "boolean" ? value : !prev
)
}
// 最後回传value && toggleValue
return [value, toggleValue];
}
export default useToggle;
那麽,我们再回到原本的component档案引入并修改:
// (before return) 原生 useState 作法
// const [toggle, setToggle] = useState(false)
// const toggleChange = () => {
// setToggle(!toggle)
// }
import useToggle from "...你useToggle.js的路径";
// 整合成一行
const [value, toggleValue] = useToggle(false)
<!-- in return -->
<div>
<h1>{value.toString()}</h1>
<button onClick={toggleValue}>toggle</button>
<button onClick={() => toggleValue(true)}>open</button>
<button onClick={() => toggleValue(false)}>close</button>
</div>
透过这样的方式,可以有效减少change function的设立,也方便维护逻辑档案。
刚开始就先从基础的概念开始分享,後续会分享更多专案上常用的custom hook function。
<<: 【C#】Creational Patterns Singleton Mode
>>: !不只是问卷!要来考验iT专家们对於永续的了解程度【来自世新大学资讯传播学系108级策展组】
今天来做个简单的东西,会使用TimePickerDialog,利用TextView显示出时间。 ac...
前言 上一篇介绍 interact 基本的用法,可以设计使用者介面(UI),但无法取得输入值,本篇介...
昨天我们创造完Project後,我们今天要学的是怎麽打造App,你们可能会对这名子感到疑惑,想说这个...
元件介绍 Infinite scroll 能在面对多笔资料时,让卷轴滑动到底部时再载入下一页面的资料...
在 Objective-C 中,为了保存基本的资料类型,像是 int, float, bool,内建...