- 实现
useState
let lastState = []
let index = 0
function useState(initialState) {
lastState[index] = lastState[index] || initialState
const currentIndex = index
function setState(newState) {
lastState[currentIndex] = typeof(newState) === 'function' ? newState(lastState) : newState;
render()
}
return [lastState[index++], setState]
}
const [num, setNum] = useState(0)
setNum(2)
setNum((num) => {
return num + 2
})
- 实现
useCallback
let lastCallback
let lastCallbackDependencies
function useCallback(callback, dependencies) {
if(lastCallbackDependencies) {
let changed = !dependencies.every((item, index) => {
return item === lastCallbackDependencies[index]
})
if(changed) {
lastCallback = callback
lastCallbackDependencies = dependencies
}
} else {
lastCallback = callback
lastCallbackDependencies = dependencies
}
return lastCallback
}
const addClick = useCallback(() => {return setNum(num + 1)}, [num])
- 实现
useMemo
let lastMemo
let lastCallbackDependencies
function useMemo(callback, dependencies) {
if(lastCallbackDependencies) {
let changed = !dependencies.every((item, index) => {
return item === lastCallbackDependencies[index]
})
if(changed) {
lastMemo = callback()
lastCallbackDependencies = dependencies
}
} else {
lastMemo = callback()
lastCallbackDependencies = dependencies
}
return lastMemo
}
const addClick = useMemo(() => ({ num }), [num])