import React from "react";
import { AiOutlineArrowDown, AiOutlineArrowUp } from "react-icons/ai";
import { useState } from "react";
const Vote = () => {
const [num, setnum] = useState(0);
const numdown = () => {
num != 0 ? setnum(num - 1) : setnum(num);
};
const numup = () => {
num < 9 ? setnum(num + 1) : setnum(num);
};
const [num2, setnum2] = useState(0);
const numdown2 = () => {
num2 != 0 ? setnum2(num2 - 1) : setnum(num2);
};
const numup2 = () => {
num2 < 9 ? setnum2(num2 + 1) : setnum2(num);
};
var value1 = (
<>
<AiOutlineArrowDown onClick={numdown} />
{num}
<AiOutlineArrowUp onClick={numup} />
</>
);
var value2 = (
<>
<AiOutlineArrowDown onClick={numdown2} />
{num2}
<AiOutlineArrowUp onClick={numup2} />
</>
);
return (
<>
{value1}
{value2}
</>
);
};
export default Vote;
在这段代码中,我有一个代码模板来形成一个轮询区,其中有两个具有递增和递减功能的表决值。表决值位于0到9之间,如两个三元运算符函数中所解释的)。
如何将这段代码压缩成一个状态函数和同样工作的递增和递减函数?
3条答案
按热度按时间6fe3ivhb1#
这是个好问题。基本上,你可以使用自定义钩子来处理所有重复的逻辑。
您可以在此处看到一个示例:https://codesandbox.io/s/affectionate-sunset-7c9lw6?file=/src/App.js
在本例中,它将使用一个钩子来处理数字numUp & numDown。
您甚至可以进一步定义处理UI的组件,类似于:
最后,在代码中使用挂钩和/或组件:
重要提示对于可用性,请考虑您甚至可以使用额外的参数,如数量到numUp或numDown
e0bqpujr2#
您应该创建一个包含计数器状态和箭头元素的组件,并使用它两次。
vmjh9lq93#
我想你看起来像这样:
应用程序js
如果您需要多次执行相同的操作,则可以创建一个组件并相应地修改此代码。
运行我提供的sandbox中的代码。