首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加切换功能,以改变按钮的背景色在它点击时的反应?

如何添加切换功能,以改变按钮的背景色在它点击时的反应?
EN

Stack Overflow用户
提问于 2022-08-09 14:03:10
回答 2查看 201关注 0票数 0

如何添加更改按钮背景色的切换函数。有一个isHeld方法,我尝试用样式变量连接按钮以切换背景色。组件中的每个元素都有一个唯一的键。这是我的代码app.js,question.jsx

app.js

代码语言:javascript
复制
import React from "react";
import "./app.css";
import Question from "./components/question/Question";
import { useState, useEffect } from "react";
import { nanoid } from "nanoid";

const id = nanoid()
export default function App() {
  const [data, setData] = useState([]);

  function addIds(data) {
    return data.map((currentTask) => {
      const id = nanoid();
      return { id, ...currentTask, isHeld: false };
    });
  }

  function fetchData(endpoint) {
    
    fetch(endpoint)
      .then((response) => response.json())
      .then((data) => {
        const tasks = addIds(data.results);
        setData(tasks);
      });
  }

  useEffect(() => {
    const endpoint = "https://opentdb.com/api.php?amount=5";
    fetchData(endpoint);
  }, []);

  function hold(e) {
    console.log(e.target.dataset.id);
    
  }

  function buildElements(data) {
    return data.map((quiz) => {
      const { question, correct_answer, incorrect_answers, isHeld, } = quiz;

      return (
        <Question
          key={nanoid()}
          question={question}
          correct_answer={correct_answer}
          incorrect_answers={incorrect_answers}
          hold={hold}
          isHeld={isHeld}
      
        />
      );
    });
  }

  if (!data.length) return <div />;

  return (<div className="app">

  {buildElements(data)}

  </div>);
}

Question.jsx

代码语言:javascript
复制
import { nanoid } from "nanoid";
import React from "react";
import "./question.css";

const id = nanoid();

export default function Question(props) {
  const { hold, question, correct_answer, incorrect_answers, isHeld} = props;

  const styles = {
   backgroundColor: isHeld ? "#59E391" : "black",
  };

  return (
    <div className="question">
      <h2 className="question-title">{question}</h2>

      <button
        key={nanoid()}
        data-id={nanoid()}
        className="correct-answer"
        onClick={hold}
        style={styles}
      >
        {correct_answer}
      </button>

      <div className="wrong-answers">
        {incorrect_answers.map((ia) => {
          const id = nanoid();
          return (
            <button
              key={id}
              data-id={id}
              className="incorrect-answer"
              onClick={hold}
              style={styles}
            >
              {ia}
            </button>
          );
        })}
      </div>
    </div>
  );
}

EN

回答 2

Stack Overflow用户

发布于 2022-08-09 14:49:16

您必须在onClick hold部分中使用箭头函数,如下所示。我认为您在循环中编写了工作随叫保持函数。

代码语言:javascript
复制
onClick={()=>hold}
票数 0
EN

Stack Overflow用户

发布于 2022-08-09 14:56:26

我觉得这样的东西能帮到你。

代码语言:javascript
复制
       <button
        key={nanoid()}
        data-id={nanoid()}
        className="correct-answer"
        onClick={() => setColor((prev) => prev === 'red' ? 'green' : 'red')}
        style={{backgroundColor: color;}}
      >

您可以添加一个带有您想要的颜色的状态,并在任何您想要的状态中使用它。

也可以在所需的索引处修改数据。

代码语言:javascript
复制
 function hold(index) {
   const newData = [...data]
   newData[index] = {...data[index], isHeld: false} // Your logic
   setData(newData)
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73293193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档