我如何让useMyState,Test 中ref都绑定到ref上并且都保持最新。
// 自定义hook
function useMyState(props, ref) {
const [state, $state] = useState(props);
useImperativeHandle(ref, () => ({
getValue: () => {
return state.value
}
}), [state.value])
return [state, $state]
}
// react 组件
const Test = forwardRef((props, ref) => {
const [state, $state] = useMyState(props, ref);
const [show, $show] = useState(false);
useImperativeHandle(ref, () => ({
getShow: () => {
return show
}
}), [show]);
return <button onClick={() => {$show(!show)}}>text</botton>
})
<Test value={1} ref={ref} />
想到了另外一种玩法
// 自定义hook
function useMyState(props) {
const [state, $state] = useState(props);
const baseApi = useMemo(() => ({
getValue: () => {
return state.value
}
}), [state.value])
return [state, $state, baseApi]
}
// react 组件
const Test = forwardRef((props, ref) => {
const [state, $state, baseApi] = useMyState(props);
const [show, $show] = useState(false);
useImperativeHandle(ref, () => ({
...baseApi,
getShow: () => {
return show
}
}), [show]);
return <button onClick={() => {$show(!show)}}>text</botton>
})
当作依赖穿进去试试