Reactjs 反应+;Redux+;Thunk:同一事件上有多个挂钩

Reactjs 反应+;Redux+;Thunk:同一事件上有多个挂钩,reactjs,redux,react-hooks,redux-thunk,Reactjs,Redux,React Hooks,Redux Thunk,当state和redux商店应该一起工作时,我遇到了钩子重用的问题。我简化了一个代码来说明这个问题 有一个组件我想使用多个钩子(为了简单起见,我在这里重复使用useMouseDownhook): 因此,第二个钩子中的mousedown事件永远不会触发。问题是重新渲染发生在第二个钩子启动之前 我找到了一些解决方案,但两者都不喜欢: 在第一个钩子mousedown属性中使用类似于setTimeout(()=>dispatch(increment()),0)。但就重复使用而言,这似乎并不明显 将两个钩

当state和redux商店应该一起工作时,我遇到了钩子重用的问题。我简化了一个代码来说明这个问题

有一个组件我想使用多个钩子(为了简单起见,我在这里重复使用
useMouseDown
hook):

因此,第二个钩子中的mousedown事件永远不会触发。问题是重新渲染发生在第二个钩子启动之前

我找到了一些解决方案,但两者都不喜欢:

  • 在第一个钩子mousedown属性中使用类似于
    setTimeout(()=>dispatch(increment()),0)
    。但就重复使用而言,这似乎并不明显
  • 将两个钩子重写为一个,并使用一个“大”mousedown处理程序进行操作。但在这种情况下,组合钩可能难以维护

  • 所以,我需要一个解决方案,允许保留结构的原样(我的意思是两个独立的挂钩),但第二个挂钩也在工作。有人能帮你得到它吗?

    你能不能把你的逻辑放在两个不同的函数中,然后在钩子的
    onMouseDown
    函数中顺序执行它

    const executeFirstFlow = () => {
      console.log('in first function');
      dispatch(increment());
    };
    
    const executeSecondFlow = () => {
      console.log('in second function');
    };
    
    useMouseDown({
        ref: plusSighRef,
        onMouseDown: () => {
            executeFirstFlow();
            executeSecondFlow();
        }
    });
    

    你不能把你的逻辑放在两个不同的函数中,然后在钩子的
    onMouseDown
    函数中顺序执行它吗

    const executeFirstFlow = () => {
      console.log('in first function');
      dispatch(increment());
    };
    
    const executeSecondFlow = () => {
      console.log('in second function');
    };
    
    useMouseDown({
        ref: plusSighRef,
        onMouseDown: () => {
            executeFirstFlow();
            executeSecondFlow();
        }
    });
    

    为什么不定义两个处理逻辑的函数,然后在一个钩子中启动它们呢?是的,我考虑过了。主要思想是第一个钩子和第二个钩子在逻辑上是不同的。我的意思是,例如,第一个钩子应该负责鼠标点击,第二个钩子应该负责拖动。所以…将它们分开使用会很好,为什么不定义两个函数来处理逻辑,然后在一个钩子中启动它们呢?是的,我考虑过了。主要思想是第一个钩子和第二个钩子在逻辑上是不同的。我的意思是,例如,第一个钩子应该负责鼠标点击,第二个钩子应该负责拖动。所以…在我认为这个解决方案的某个地方单独使用它们会很好,它绝对有效,但主要思想是第一个钩子和第二个钩子在逻辑上是不同的。我的意思是,例如,第一个钩子应该负责鼠标点击,第二个钩子应该负责拖动。所以…在某个地方单独使用它们会很好。我认为这个解决方案绝对有效,但主要思想是第一个钩子和第二个钩子在逻辑上是不同的。我的意思是,例如,第一个钩子应该负责鼠标点击,第二个钩子应该负责拖动。所以…在某个地方单独使用它们会很好。
    const executeFirstFlow = () => {
      console.log('in first function');
      dispatch(increment());
    };
    
    const executeSecondFlow = () => {
      console.log('in second function');
    };
    
    useMouseDown({
        ref: plusSighRef,
        onMouseDown: () => {
            executeFirstFlow();
            executeSecondFlow();
        }
    });