【问题标题】:React Hooks with button on clicksReact Hooks 与点击按钮
【发布时间】:2022-01-05 04:38:03
【问题描述】:

我刚开始使用 React 钩子并尝试使用 3 个可以单击的按钮,它应该告诉我它被单击了多少次。我可以让它们分别工作,但这并不高效。

因此,我一直在寻找仅使用两个类来使其有用:一个用于按钮,另一个用于柜台部分。但现在我正在努力调用函数并分离(单击哪个)按钮。

import React, { useState } from "react";
import Counter from "./Counter";
const Buttons = () => {
  const HandleClick = () => {
    setCounter(count + 1);
  };
  const [count, setCounter] = useState(0);
  return (
    <div>
      <button className={"GoodBtn"} onClick={HandleClick}>
        Good
      </button>
      <button className={"NeutralBtn"} onClick={HandleClick}>
        Neutral
      </button>
      <button className={"BadBtn"} onClick={HandleClick}>
        Bad
      </button>
    </div>
  );
};

export default Buttons;

import React, { useState } from "react";
import Buttons from "./Buttons";

const Counter = () => {
  const [count, setCount] = useState(0);
  const teller = () => count + 1;
  return (
    <div>
      <h2>Statistics</h2>
      <p>Good {Buttons.count}</p>
      <p>Neutral {Buttons.count}</p>
      <p>Bad {Buttons.count}</p>
    </div>
  );
};

export default Counter;

【问题讨论】:

    标签: javascript reactjs web react-hooks webstorm


    【解决方案1】:
    import React, { useState } from 'react';
    import Counter from "./Counter";
    const Buttons = () => {
        const[count,setCounter]= useState({
             good: 0,
             neutral: 0,
             bad: 0
        });
    
         const HandleClick = (key) =>{
             setCounter(state => ({...state, [key]: state[key] + 1}));
         }
    
         return (
             <div>
                 <button className={"GoodBtn"} onClick={HandleClick('good')}>Good</button>
                 <button className={"NeutralBtn"} onClick={HandleClick('neutral')}>Neutral</button>
                 <button className={"BadBtn"} onClick={HandleClick('bad')}>Bad</button>
            
             <Counter counts={count} />
           </div>
        )
    }
    
    export default Buttons;
    
    
    
    
    import React, { useState } from 'react';
    import Buttons from "./Buttons";
    
    const Counter = (props) => {
        return(
            <div>
                <h2>Statistics</h2>
                <p>Good {props.counts.good}</p>
                <p>Neutral {props.counts.neutral}</p>
                <p>Bad {props.counts.bad}</p>
            </div>
        )
    }
    
    export default Counter;
    

    【讨论】:

      【解决方案2】:

      你不能只做Buttons.count。 Buttons 是一个 React 组件,需要先创建,比如:&lt;Buttons /&gt;。

      如果你想用计数器包裹你的按钮组件,你可以这样做:

      const CountableButton = ({ onCounterChange, ...props }) => {
        const [count, setCounter] = useState(0);
      
        const handleClick = (event) => {
          //to correctly change state variable based on previous value
          setCounter((prevCounter) => prevCounter + 1); 
        };
      
        //Every time count changes trigger the onCounterChange function
        React.useEffect(() => {
          onCounterChange(count);
        }, [count]);
      
        return (
          <button {...props} onClick={handleClick}>
            Good
          </button>
        );
      };
      
      

      你会像这样使用它:

      
      const App = () => {
        const [count, setCount] = useState(0);
      
        return (
          <div>
            <h2>Button clicked {count} times</h2>
            <CountableButton onCounterChange={(value) => setCount(value)} />
          </div>
        );
      };
      
      

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 2020-03-31
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 2019-11-08
        • 1970-01-01
        • 1970-01-01
        • 2021-10-20
        相关资源
        最近更新 更多