javascript - react 保存使用重新渲染组件选择文本的可能性

标签 javascript reactjs react-hooks

我有带有文本的组件。它通过鼠标单击更改组件自身的状态。但我想保存通过长按选择和复制的可能性。有办法做到吗?重新渲染组件后将重置选择。代码示例:

const App = () => {
    const [someState, setSomeState] = React.useState(0);

    const clickHandler = () => {
        setSomeState(someState + 1);
    }
    return (
        <div
            className="App"
            onClick={clickHandler}
        >
            {'State ' + someState}
        </div>
    );
};

ReactDOM.render(<App />, document.getElementById("root"));

最佳答案

您自己使用 onMouseDownonMouseUp 事件并计算用户单击所用的时间(而不是使用 onClick)怎么样? 例如,您可以执行以下操作:

const App = () => {
  const [someState, setSomeState] = React.useState(0);
  const [timeDown, setTimeDown] = React.useState(-1);

  const clickHandler = () => setSomeState(someState + 1);

  const handleMouseDown = () => setTimeDown(Date.now()); // Save the time of the mousedown event
  const handleMouseUp = () => {
    const timeUp = Date.now();
    const timeDiff = timeUp - timeDown; // Calculate the time the user took to click and hold
    if (timeDiff < 1000) { // If it's shorter than 1000ms (1s) execute the normal click handler
      clickHandler();
    } else { // Execute some other logic, or just ignore the click
      // handleLongClick();
    }
  };

  return (
    <div
      className="App"
      onMouseDown={handleMouseDown}
      onMouseUp={handleMouseUp}
    >
      {"State " + someState}
    </div>
  );
};

您可以找到一个快速的codesandbox作为演示here

关于javascript - react 保存使用重新渲染组件选择文本的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60563190/

相关文章:

javascript - Undefined 不是一个对象(评估 'navigator.permissions.query' )

reactjs - React 重写 useEffect 中的 componentWillReceiveProps

javascript - 以字符串作为第一个操作数的加法运算符可以返回非字符串吗?

javascript - 如何循环多个 jQuery 函数

reactjs - React-Datepicker:showTimeSelect 边距未正确对齐

reactjs - 部署到 github 页面时图像不会加载

javascript - 如何使用javascript从网页获取JSON对象数据

javascript - 如何使用 Javascript 执行函数并跟踪页面退出时的出站链接?

reactjs - 在 HoC 中使用 React hook 时发出警告

javascript - React Hooks 是否比 Class Components 使用更多内存?