hei*_*584 5 typescript reactjs react-hooks
我编写了用于切换布尔和值的自定义钩子:
import { useState } from 'react';
export function useToggle(initialValue: boolean) {
const [value, setValue] = useState<boolean>(initialValue);
const toggleValue = () => setValue(!value);
return [value, toggleValue];
}
Run Code Online (Sandbox Code Playgroud)
然后我像下面这样使用它:
const [modalOpen, setModal] = useToggle(false);
Run Code Online (Sandbox Code Playgroud)
但出现错误:
输入“布尔值|” (() => void)' 不可分配给类型 'boolean | ((() => void) & false) | ((() => void) & true)'。类型“() => void”不可分配给类型“boolean |” ((() => void) & false) | ((() => void) & true)'。类型“() => void”不可分配给类型“(() => void) & false”。类型“() => void”不可分配给类型“false”。
小智 5
您可能需要定义钩子的返回类型。它应该看起来像这样。
import { useState } from 'react';
export function useToggle(initialValue: boolean): [boolean, () => void] {
const [value, setValue] = useState<boolean>(initialValue);
const toggleValue = () => setValue(!value);
return [value, toggleValue];
}
Run Code Online (Sandbox Code Playgroud)
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')
)Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3910 次 |
| 最近记录: |