Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在react中未使用钩子获取更新的状态值?_Javascript_Reactjs_React Redux_React Router_React Hooks - Fatal编程技术网

Javascript 在react中未使用钩子获取更新的状态值?

Javascript 在react中未使用钩子获取更新的状态值?,javascript,reactjs,react-redux,react-router,react-hooks,Javascript,Reactjs,React Redux,React Router,React Hooks,我正在使用功能组件。我有2个单选按钮和一个submit按钮。在submit按钮上,我无法获得更新值 这是我的密码 复制步骤 运行应用程序。默认情况下,单选按钮值为no 将任一单选按钮更改为是。然后单击提交按钮。它应该显示状态的更新值。但它显示的是初始状态为什么 按钮提交处理程序 const buttonHandler = useCallback(async e => { e.preventDefault(); console.log(state); }, []);

我正在使用
功能组件
。我有
2个
单选按钮和一个
submit
按钮。在submit按钮上,我无法获得
更新值

这是我的密码

复制步骤

  • 运行应用程序。默认情况下,单选按钮值为
    no
  • 将任一单选按钮更改为
    。然后单击提交按钮。它应该显示状态的更新值。但它显示的是初始状态为什么
  • 按钮提交处理程序

     const buttonHandler = useCallback(async e => {
        e.preventDefault();
        console.log(state);
      }, []);
    
    如果像这样将
    空白数组更改为数组状态下的一个项目
    。它可以正常工作,但当我更改
    状态
    时,它会重新渲染按钮组件有更好的解决方案吗???防止重新渲染并获取更新状态

     const buttonHandler = useCallback(async e => {
        e.preventDefault();
        console.log(state);
      }, [state]);
    

    状态
    添加到
    按钮句柄
    使用回调依赖项数组

    const buttonHandler = useCallback(async e => {
      e.preventDefault();
      console.log(state);
    }, [state]);
    

    或者,不要记忆
    按钮Handler
    回调

    const buttonHandler = e => {
      e.preventDefault();
      console.log(state);
    };
    

    状态
    添加到
    按钮句柄
    使用回调依赖项数组

    const buttonHandler = useCallback(async e => {
      e.preventDefault();
      console.log(state);
    }, [state]);
    

    或者,不要记忆
    按钮Handler
    回调

    const buttonHandler = e => {
      e.preventDefault();
      console.log(state);
    };
    

    useChangeHandler
    在App.js中未定义
    userchangehandler.js
    在沙箱中为空。但是,从这里代码片段的外观来看,我可以看到您使用了一个空的依赖项数组将初始状态包含在
    useCallback
    hook中。我认为如果你在依赖项中添加
    state
    ,它应该会起作用。TBH可能也没有理由记住此回调,因为
    Submit
    除了呈现按钮外不做任何事情。为什么不希望按钮重新呈现?检查updated link@drewrese updated link刚刚使用添加到
    buttonHandler
    useCallback依赖项数组中的
    state
    对其进行了测试,它可以工作。
    useChangeHandler
    App.js中未定义
    userchangehandler.js
    在沙箱中为空。但是,从这里代码片段的外观来看,我可以看到您使用了一个空的依赖项数组将初始状态包含在
    useCallback
    hook中。我认为如果你在依赖项中添加
    state
    ,它应该会起作用。TBH可能也没有理由记住此回调,因为
    Submit
    除了呈现按钮外不做任何事情。为什么不希望按钮重新呈现?检查updated link@drewrese updated link刚刚使用添加到
    buttonHandler
    useCallback依赖项数组中的
    state
    对其进行了测试,这很有效。我明白你的意思,但我会对此进行优化??对于性能方面的
    按钮
    组件,当状态更改时将重新渲染。这是一个最佳实践吗?为什么我要问这个问题,因为如果我的表单中有多个元素。当我更改任何组件状态时,它会重新渲染
    按钮
    component@user944513这看起来完全属于过早优化的范畴。使用
    useCallback
    时,它必须重新启动,因为您需要更新回调以包含更新的状态。由于每次状态更新和每个渲染周期都会发生这种情况,因此“提交”按钮无论如何都会重新渲染。目前不使用记忆回调是否存在性能问题?我明白你的意思,但我会对此进行优化??对于性能方面的
    按钮
    组件,当状态更改时将重新渲染。这是一个最佳实践吗?为什么我要问这个问题,因为如果我的表单中有多个元素。当我更改任何组件状态时,它会重新渲染
    按钮
    component@user944513这看起来完全属于过早优化的范畴。使用
    useCallback
    时,它必须重新启动,因为您需要更新回调以包含更新的状态。由于每次状态更新和每个渲染周期都会发生这种情况,因此“提交”按钮无论如何都会重新渲染。当前是否存在不使用记忆回调的性能问题?