Javascript React Hook API,我是否需要设置SetStateAction的DEP?

Javascript React Hook API,我是否需要设置SetStateAction的DEP?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我有一个关于使用react hook api的问题 const Example: FC = (props) => { const [str, setStr] = useState('example'); const onClickCb = useCallback(() => { setStr(str + '_'); }, [str, setStr]); // should I need watch setStr? return <

我有一个关于使用react hook api的问题

const Example: FC = (props) => {
    const [str, setStr] = useState('example');
    const onClickCb = useCallback(() => {
        setStr(str + '_');
    }, [str, setStr]); // should I need watch setStr?
    return <button onClick={onClickCb}>{str}</button>;
};
const示例:FC=(道具)=>{
const[str,setStr]=useState(“示例”);
const onClickCb=useCallback(()=>{
setStr(str+'"');
},[str,setStr]);//我需要看setStr吗?
返回{str};
};

否您不需要添加
setStr
,因为它在组件的使用寿命期间不会改变。但添加它也没有多大危害,因为它不会改变

从:

注意

React保证
setState
函数标识是稳定的,并且在重新渲染时不会更改。这就是为什么从
useffect
useCallback
依赖项列表中省略是安全的

但是你必须删除
str
。状态不应根据当前状态更新为。这可能导致在短时间内发生的更新丢失。而是使用回调版本的
setState

const Example: FC = (props) => {
    const [str, setStr] = useState('example');
    const onClickCb = useCallback(() => setStr(current => `${current}_`)), []);
    return <button onClick={onClickCb}>{str}</button>;
};
const示例:FC=(道具)=>{
const[str,setStr]=useState(“示例”);
const onClickCb=useCallback(()=>setStr(current=>`${current}}`),[]);
返回{str};
};

否您不需要添加
setStr
,因为它在组件的使用寿命期间不会改变。但添加它也没有多大危害,因为它不会改变

从:

注意

React保证
setState
函数标识是稳定的,并且在重新渲染时不会更改。这就是为什么从
useffect
useCallback
依赖项列表中省略是安全的

但是你必须删除
str
。状态不应根据当前状态更新为。这可能导致在短时间内发生的更新丢失。而是使用回调版本的
setState

const Example: FC = (props) => {
    const [str, setStr] = useState('example');
    const onClickCb = useCallback(() => setStr(current => `${current}_`)), []);
    return <button onClick={onClickCb}>{str}</button>;
};
const示例:FC=(道具)=>{
const[str,setStr]=useState(“示例”);
const onClickCb=useCallback(()=>setStr(current=>`${current}}`),[]);
返回{str};
};

在我看来,在本例中根本不需要使用useCallback。它增加了复杂性,但几乎没有任何好处。但是如果你真的想使用hook,trixn的答案是正确的。@PavelKratochvil那么你如何防止在没有
useCallback
的情况下在
FC
的每个渲染上传递一个新的回调?在这种情况下你为什么需要它?@PavelKratochvil这显然是一个虚构的例子来说明这一点。问题是是否需要将
useState
的更新程序函数传递给
useCallback
的依赖项列表。这里需要它来进行说明。在几乎所有其他实际用例中都会有好处。经验法则:如果您将其作为处理程序传递,请使用
useCallback
。我说过,您的答案是正确的只是指出,在这个例子中,没有使用它的neef。也许这个例子不只是为了说明,而是真正的例子,谁知道呢。我想说的是:不要过度设计它,因为你可以:)在我看来,在这个例子中根本没有必要使用useCallback。它增加了复杂性,但几乎没有任何好处。但是如果你真的想使用hook,trixn的答案是正确的。@PavelKratochvil那么你如何防止在没有
useCallback
的情况下在
FC
的每个渲染上传递一个新的回调?在这种情况下你为什么需要它?@PavelKratochvil这显然是一个虚构的例子来说明这一点。问题是是否需要将
useState
的更新程序函数传递给
useCallback
的依赖项列表。这里需要它来进行说明。在几乎所有其他实际用例中都会有好处。经验法则:如果您将其作为处理程序传递,请使用
useCallback
。我说过,您的答案是正确的只是指出,在这个例子中,没有使用它的neef。也许这个例子不只是为了说明,而是真正的例子,谁知道呢。我想说的是:不要因为你可以,就过度设计它:)