useSyncExternalStore 的使用
import React, {Fragment, useSyncExternalStore} from "react";
function subscribe(callback){
window.addEventListener('online', callback)
window.addEventListener('offline', callback)
return () => {
window.removeEventListener('online', callback)
window.removeEventListener('offline', callback)
}
}
function App() {
const isOnline = useSyncExternalStore(subscribe, () => window.navigator.onLine)
return <Fragment>
{isOnline.toString()}
</Fragment>
}
useEffectEvent
useCallback()
- useCallback 避免render过程 反复生成新函数
import React, {Fragment, useCallback, useState} from "react";
function App() {
const [content, setContent] = useState('')
const handleContentChange = useCallback((e) => {
setContent(e.target.value)
}, [])
return <Fragment>
<input value={content ? content : ''} onChange={handleContentChange} />
</Fragment>
}
useImperativeHandle
import React, {Fragment, forwardRef, useEffect, useImperativeHandle, useRef, useState} from "react";
const UseInfo = forwardRef ((props, ref) => {
const inputRef = useRef(null);
useImperativeHandle(ref, () => {
return {
blur(){
},
focaus(){
console.log(inputRef);
inputRef.current.focaus()
},
value: inputRef.current.value
}
})
const [value, setValue ] = useState('deLl');
return <input ref={inputRef} value={value} onChange={(e) => {setValue(e.target.value)}}></input>
})
function App() {
const parentRef = useRef(null);
useEffect(()=>{
console.log( parentRef.current.value);
}, [])
return <Fragment>
<UseInfo ref={parentRef} />
</Fragment>
}
Suspense
import React, {Fragment, Suspense} from "react";
const TodoList = React.lazy(() => import('./todoList'))
function App() {
return <Fragment>
<Suspense fallback={<div>loading...</div>}>
<TodoList />
</Suspense>
</Fragment>
}