如果想快速使用 Hook ,其实就参考 Hook 概观分的五个面向,包含一定会用也最常用的 State Hook、Effect Hook,以下罗列:
复习一下 Hook 是什麽?
Hook 是 function,他让你可以从 function component「hook into」React state 与生命周期功能。
我们在 function component 中呼叫 State Hook 用来加入一些 local state。但为什麽不直接宣告一个变数或物件储存就好了? 因为需要进行资料的追踪,所以还会搭配 set 事件,以下举例。
在上一篇 Hello Hook 已经举过单一个 State Hook 的例子,在这里补充多个的宣告。例如设定 fruit,setFruit 进行 fruit 资料的储存跟修改。
function OneMeal() {
// 宣告多个 state 变数!
const [bento, setBento] = React.useState("???");
const [fruit, setFruit] = React.useState("?");
const [beverage, setBeverage] = React.useState([{ text: '?' }, { text: '?' }, { text: '?' }]);
return (
<div>
<h1>Hello useState</h1>
<p> { bento } </p>
<p> { fruit } </p>
<ul>
{
beverage.map((item)=>{
return <li key={item.text}>{ item.text }</li>
})
}
</ul>
<button onClick={()=>{setFruit(fruit + '?')}}>Add Fruits</button>
</div>
)
}
\\略
记得在生命周期有学到 componentDidMount,componentDidUpdate,与 componentWillUnmount ,而 Effect Hook 把这些功能整合在一起,React component 把 fetch 资料、订阅、或手动改变 DOM 视作基本渲染以外的 「副作用」,定针对这些处理写了一个 Effect Hook 来集中我们这些 「副作用」的关注点。
function TestUseState() {
const [title, setTitle] = React.useState("I am waiting...");
React.useEffect(() => {
async function getTitle() {
let response = await fetch('https://jsonplaceholder.typicode.com/todos/1')
response = await response.json()
setTitle(response.title)
}
getTitle()
});
return (
<div>
<h3>Hello UseEffect Hook</h3>
<p>{ title }</p>
</div>
)
}
class App extends React.Component {
render() {
return (
<div className="App">
<TestUseState />
</div>
);
}
}
//略
当几个元件使用了同样的逻辑时,我们可以抽出并定义一个共通逻辑的 function 。在 Hook 出现以前,使用的解法都是 higher-order components 与 render props (後续文章补充)。以下举例 setimeout 的共用逻辑,定可设定不同的 delay 时间。
function myTimeout(delay) {
const [show, setShow] = React.useState(false);
React.useEffect(
() => {
let timer1 = setTimeout(() => setShow(true), delay * 1000);
return () => {
clearTimeout(timer1);
};
},
[]
);
return show;
}
function Vender() {
const [banana, takeBanana] = React.useState(0);
const timer1 = myTimeout(1)
const timer2 = myTimeout(3)
return (
//略
);
}
在 API 文件里,其实还提供其他官方定义的 Hook ,例如 useContext、useReducer、useRef 等,可供用进一步的需求使用。可参考 Hook API 。
以上今天。
参考资料:
https://zh-hant.reactjs.org/docs/hooks-overview.html
使用工具:
Fake API https://jsonplaceholder.typicode.com/
TableView:Storyboard + Table View + Table View Cel...
Primitive type VS Object type primitive 是不可改变的(Imm...
在上一篇稍微讲解了一下 认识 jQuery 的基本使用与安装教学,现在来简易说明如何透过 jQuer...
某类型的App价格愈高,使用者平均评价也会有正相关吗? 这是个蛮有趣的议题,照理来说愈贵的app功能...
不知道大家知不知道 TTRPG 呢? 比较有名的大概就是龙与地下城(D&D)吧 之前看 ho...