我写了用于切换boole和valuse的自定义钩子:
import { useState } from 'react';
export function useToggle(initialValue: boolean) {
const [value, setValue] = useState<boolean>(initialValue);
const toggleValue = () => setValue(!value);
return [value, toggleValue];
}
然后我按如下方式使用它:
const [modalOpen, setModal] = useToggle(false);
但是会出现错误:
输入'boolean | (()=> void)'不能分配给'boolean | ((()=>无效)&false)| ((()=>无效)&true)'。输入'()=> void' 不可分配给'boolean | ((()=>无效)&false)| ((()=> 无效)和真实)”。 类型'()=> void'不能分配给类型'(()=> void)&false'。 类型'()=> void'不能分配给类型'false'。
答案 0 :(得分:1)
const {useRef, useState} = React;
function useToggle(initialState){
const [value, setValue] = useState(initialState);
const toggle = () => { setValue(!value) };
return [value, toggle];
};
function App(){
const [modal, setModal] = useToggle(false);
return (
<div>
<button onClick={setModal}>Toggle!</button>
{modal && <span>Toggle!!!!</span>}
</div>
)
}
ReactDOM.render(
<App />, document.getElementById('root')
)
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>
答案 1 :(得分:1)
您可能需要定义挂钩的返回类型。它应该看起来像这样。
import { useState } from 'react';
export function useToggle(initialValue: boolean): [boolean, () => void] {
const [value, setValue] = useState<boolean>(initialValue);
const toggleValue = () => setValue(!value);
return [value, toggleValue];
}