( 今天的文章要写React的相关问题,完全没有写过React的人,建议从中文官方文件开始练习。)
React与其他JS框架有个很大的特色,
就是将会重复使用的程序码包装成元件(Component),以便往後专案的维护。
以往React的元件都常都会写成class的形式,
在React 16.8後以後(2021/3 更新至 v17.0.2),增加了React Hooks的功能。
Hook 是对 React 概念:props、state、context、refs 以及 lifecycle,提供了一个更直接的 API。
以往撰写成Class的形式,有一些实作上的缺陷,而Hook的功能带来了一些改善:
过去React没有办法把可重用的行为「附加(attach)」到一个元件上,
每当需要使用Stateful的逻辑,都必须重新去建构元件,
且如果是被包裹成非常多层的元件,会更不方便进行重构。
Hook 能在不改变 component 阶层的情况下重用 stateful 的逻辑。(也就是後文示范的useState)
基於原先React元件依照lifecycle方法进行拆分,
不相关的逻辑可能会被强迫放在同一个生命周期里。
也基於stateful逻辑不能重复使用的关系,原来的元件架构会更复杂,
使用State函式库集中管理可能也不够直观。
Hook 能把一个 component 拆分成更小的 function,让元件之间的逻辑关系更清晰。
使用class写法必须多加注意this的指向,或是绑定(bind)event handler。
虽然基础好的人可能没有这些困扰QQ。但考虑到React在概念上比起Class,其实更接近Function,
官方还是提供了Hook这种更便於学习和使用的形式。
以React Hooks中的State Hook为例,Hook本身是指函式(function),
useState用於在每次输入、资料更动时,重新渲染画面。
基本语法:
const [input, setValue] = useState("");
input
是一个变数,而setValue
是一个函式,
useState("")
里的(小括号)会是input
的初始值,范例的初始值为空""
而如果要使用State Hook,必须先从modules引入useState
import React, { useState } from 'react';
这里借用codepen的useState模板进行解说(撷取重点程序码),
先尝试帮input设值:
import React, { useState } from 'react';
const App = () => {
const [input, setValue] = useState(""); // input初始值为空
handleInput = (event) => {
setValue(event.target.value); // 设值的方法,可以想成input = event.target.value;
}
return(
...
<input type="text" value={input} name="name-1" onChange={handleInput} class="input"/>
// value设为input,每次输入值改变(onChange)就执行handleInput函式。
)
ReactDOM.render(<App />,
document.getElementById("root"))
到这里,可以确认每次State跟着input
改变。
然後继续执行渲染:
const App = () => {
const [input, setValue] = useState("");
const [name, setName] = useState('User'); // name的初始值为'User'
handleInput = (event) => {
setValue(event.target.value);
}
updateName = (event) => {
event.preventDefault();
setName(input); // name = input
setValue(""); // input = "", 将输入框设为空
}
return(
...
<h1>
Hello, <span>{name}!</span> //显示name的值
</h1>
...
<input type="text" value={input} name="name-1" onChange={handleInput} class="input"/>
...
<button onClick={updateName} class="button is-dark">Save</button>
// 每次按按钮(onClick)执行updateName()
...
)
ReactDOM.render(<App />,
document.getElementById("root"))
到这里可以完成一个输入到渲染画面的简易输入框!
【如内文有误还请不吝指教>< 并感谢阅览至此的各位:D 】
参考资料
-介绍 Hook
---正文结束---
<<: Swift 新手-App Launch Screen 设计&程序码互动
我们昨天有提到说,Django是一个Python的框架,理所当然的我们的电脑也要有Python才能运...
身为一个没有Android手机的用户 当要测试程序时,又借不到Android手机,怎麽办呢?? An...
在测试时会因为需要经过一些 Service、Worker、第三方服务导致真的去运行,进而让测试速度变...
今天我们可能可以来做一下回合,毕竟要算分数还是干嘛都是建立在回和上面。 目前我们的 game str...
IMPORT csv LOAD DATA INFILE 'test.csv' INTO TABLE ...