reactjs - 如何将 react 事件处理程序移动到单独的文件,导出然后导入以在多个不同的功能组件中重用?

标签 reactjs react-hooks

我有一个 React 功能组件,它打印一个计数器数字,在单击按钮时递增或递减。下面是我的函数

我正在使用 react 版本:^16.13.1

export default function  Counter(){
    const [count, setCount] = useState(0);

    const increment = () => {
        //more logic here ..
        setCount(count + 1);
    }
    const decrement = () => {
        //more logic here ..
        setCount(count !== 0 ? count - 1 : 0);
    }
    return (
        <div>
          <p>You clicked {count} times</p>
          <button onClick={() => increment()}>Increment SO</button>
          <button onClick={() => decrement()}>Decrement SO</button>
        </div>
      );
} 

我想将包括设置状态的事件处理程序逻辑分离到一个单独的文件中并将其导出......如下所示

import React, { useState } from 'react';

const Increment = () => {
    //more logic here ..
    setCount(count + 1);
}
const Decrement = () => {
    //more logic here ..
    setCount(count !== 0 ? count - 1 : 0);
}


export default { Increment, Decrement };

我想像下面这样在 Counter 函数中使用这些导出的函数

import CounterHelper from './CounterHelper';
<button onClick={() => CounterHelper.Increment()}>Increment SO</button>

我在运行这个程序时遇到了几个错误,所以我确信我在这里遗漏了一些基本的东西。有人可以告诉我这是否可能吗?是否有任何替代选项可以仅使用功能组件和 react Hook 来实现上述目标。

提前致谢。

最佳答案

只需传递变量引用。

CounterHelper.js

export const Increment = (count, setCount) => {
    //more logic here ..
    setCount(count + 1);
};

export const Decrement = (count, setCount) => {
    //more logic here ..
    setCount(count !== 0 ? count - 1 : 0);
};

计数器.js

import React, { useState } from 'react';
import { Increment, Decrement } from './CounterHelper';
export default function  Counter(){
    const [count, setCount] = useState(0);

    return (
        <div>
          <p>You clicked {count} times</p>
          <button onClick={() => Increment(count, setCount )}>Increment SO</button>
          <button onClick={() => Decrement(count, setCount)}>Decrement SO</button>
        </div>
      );
} 

关于reactjs - 如何将 react 事件处理程序移动到单独的文件,导出然后导入以在多个不同的功能组件中重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64393216/

相关文章:

javascript - ReactJS - 无法将用户输入限制为仅字母

reactjs - React 数组状态不推送值

javascript - 是否可以使用 React 中的 useState() 钩子(Hook)在组件之间共享状态?

reactjs - 如何在 React.js 项目中包含 FontAwesome 图标

reactjs - 使用 CSP : Refused to execute inline script react CRA

reactjs - 使用 react 钩子(Hook)过滤类别

javascript - 我需要在 react 功能中清除超时吗?

javascript - <td> 不能作为 `div` 的 child 出现?

javascript - 尽管初始化成功,Redux 存储还是未定义

javascript - React + Redux,render() 没有返回任何内容