Hooks & API
useState & useReducer
useEffect & useLayoutEffect
useMemo & useCallback
useContent
useImmer
tsx
import { useImmer } from 'use-immer';
const [person, setPerson] = useImmer({
name: 'Niki de Saint Phalle',
artwork: {
title: 'Blue Nana',
city: 'Hamburg',
image: 'https://i.imgur.com/Sd1AgUOm.jpg',
}
});
// 这样更新并不会覆盖之前的 state!
updatePerson(draft => {
draft.name = e.target.value;
});useRef
forwardRef
访问其他组件的DOM节点
<MyInput ref={inputRef} />告诉React将相应的DOM节点放入 inputRef.current 。这通常取决于 MyInput 组件,默认情况下,它不会.MyInput组件使用 forwardRef 声明。它接收来自 prop 的 inputRef 作为第二个 ref 参数.MyInput将它直接接收到的 ref 传递给内部的<input>
jsx
import { forwardRef, useRef } from 'react'
const MyInput = forwardRef((props, ref) => {
return <input {...props} ref={ref} />
})
export default function Form() {
const inputRef = useRef(null)
function handleClick() {
inputRef.current.focus()
}
return (
<>
<MyInput ref={inputRef} />
<button onClick={handleClick}>
Focus the input
</button>
</>
)
}