React Basics
概念
虚拟 DOM 树和浏览器中的真实 DOM 树进行比较。当出现不一致的情况时,浏览器中 DOM 树的描述会更新为虚拟 DOM 树中的描述
import { createElement, render } from "preact";
let vdom = createElement("p", { class: "big" }, "Hello World!");
render(vdom, document.body);
使用 Babel 将 jsx 编译为 js
Class Components
Simple Components
Props
Hooks
useState
状态更新时整个组件会重新渲染
使用异步
useReducer 用于处理更复杂的数据
const initialState = { backgroundColor: "#fff" };
const reducer = (state, action) => {
switch (action) {
case "black":
return { backgroundColor: "#000" };
}
};
const [state, dispatch] = useReducer(reducer, initialState);
useEffect
在组件渲染完成后调用
内部代码只在数组内状态更新时重新调用
useLayoutEffect 在组件渲染前调用,会阻塞代码
useContext
上下文更新时,所有使用该上下文的组件都会更新
<CounterContext.Provider value={contextValue}>
</CounterContext.Provider>
const { increment } = useContext(CounterContext)!
useRef
const titleRef = useRef()
useEffect(() => {
console.log(titleRef.current.offsetHeight)
}, [])
<h1 ref={titleRef}>Hello</h1>
useMemo
缓存一个值,防止重新渲染
重新渲染后 Props 会改变,使用 useCallback 指向同一个函数
const handleMultiplier = useMemo(() => {
return function () {
setCount((prevCount) => prevCount * 123);
};
}, []);
export default memo(Multiplier);
useTransition
用于处理非紧急的操作