Javascript 如何使用react更改按钮的背景色

Javascript 如何使用react更改按钮的背景色,javascript,reactjs,Javascript,Reactjs,我正在使用引导处理react,最初我给我的按钮赋予相同的颜色,现在我要做的是单击按钮更改按钮的颜色,如果我单击其他按钮,它将更改按钮的颜色,并将第一个按钮的颜色恢复为基本(默认)颜色 我在前面使用jquery传递onclick事件并切换颜色时已经完成了这项工作,但在这里我是新手,所以不知道如何做 我的代码 我要寻找的是,假设我有7个按钮,我点击第一个按钮,然后它的颜色应该改变,如果我点击下一个按钮,那么第一个按钮应该恢复正常,点击的(第二个)按钮应该改变颜色 重要信息第一个按钮应始终处于活动模

我正在使用引导处理react,最初我给我的按钮赋予相同的颜色,现在我要做的是单击按钮更改按钮的颜色,如果我单击其他按钮,它将更改按钮的颜色,并将第一个按钮的颜色恢复为基本(默认)颜色

我在前面使用jquery传递onclick事件并切换颜色时已经完成了这项工作,但在这里我是新手,所以不知道如何做

我的代码

我要寻找的是,假设我有7个按钮,我点击第一个按钮,然后它的颜色应该改变,如果我点击下一个按钮,那么第一个按钮应该恢复正常,点击的(第二个)按钮应该改变颜色

重要信息第一个按钮应始终处于活动模式,即它应具有活动颜色,然后如果下一次单击,则颜色将变为正常颜色,单击的按钮应采用该颜色

import React from 'react'

function Stddata() {
    const button_Data = [
      {
        "name": "Name",
        "value": "name"
      },
      {
        "name": "Class",
        "value": "class"
      },
      {
        "name": "Age",
        "value": "age"
      },
      {
        "name": "Subjects",
        "value": "subjects"
      },
      {
        "name": "School",
        "value": "school"
      }
    ]
    return (
        <div>
            { button_Data.map(item => (
                <div key={item.value}>
            <button 
                className="btn btn-outline-secondary mb-1 form-control text-left"
                value={item.value}
                onClick={props.trigerOnClickEmpSideBtn}
            >{item.name}</button>
            </div>
            ))}   
        </div>
    )
}

export default Stddata
从“React”导入React
函数Stddata(){
常量按钮\u数据=[
{
“名称”:“名称”,
“值”:“名称”
},
{
“名称”:“类”,
“值”:“类”
},
{
“姓名”:“年龄”,
“价值”:“年龄”
},
{
“姓名”:“受试者”,
“价值”:“主体”
},
{
“名称”:“学校”,
“价值”:“学校”
}
]
返回(
{button_Data.map(项=>(
{item.name}
))}   
)
}
导出默认标准数据

您需要使用一些状态。在组件中,让我们定义哪个按钮当前处于活动状态。我们可以使用
useState
并将其起始值设置为0,正如您所说,您希望第一个按钮以激活状态启动:

import React,{useState}来自“React”
//在组件内部
常量[activeButton,setActiveButton]=useState(0)
您的按钮的
onClick
将引用该功能来更改当前激活的按钮。在
className
中,它将检查自己的索引是否与当前活动的按钮相同,并相应地设置css类:

{button_Data.map((item, index) => (
  <button 
    className={`btn ${activeButton === index ? 'btn-success' : null}`}  
    value={item.value} 
    onClick={ () => {setActiveButton(index)} }
  >

    {item.name}

  </button>
))}

{button_Data.map((项目,索引)=>(
{setActiveButton(索引)}
>
{item.name}
))}
编辑:添加 实际上,我不得不将每个按钮分解成自己的组件,因为每个按钮现在都需要管理自己的状态。基本原理是相同的,但每个按钮现在都是具有自己状态的自己的组件

编辑2:
随着最初问题的改变,我改变了答案。codesandbox也反映了这些变化。codesandbox仍然为按钮使用单独的组件,尽管根据新的问题参数,这并不是真正必要的,但原理是相同的。

将此组件用于按钮

    import React from 'react';
    import {View,StyleSheet, TouchableOpacity} from 'react-native'

const Btn= props =>{
    if(props.touch){
        return (
        <TouchableOpacity style={{...styles.boxes, ...props.style}} onPress={props.onPress}>
            {props.children}
        </TouchableOpacity>
        );
    }else{
        return (
            <View style={{...styles.boxes, ...props.style}}>
                {props.children}
            </View>
        );
    }

}
const styles= StyleSheet.create({
    boxes :{
        padding:18,
        backgroundColor:'white',
        borderRadius:20        
    }
});

export default Btn;
从“React”导入React;
从“react native”导入{View,StyleSheet,TouchableOpacity}
常量Btn=道具=>{
如果(道具触摸){
返回(
{props.children}
);
}否则{
返回(
{props.children}
);
}
}
const styles=StyleSheet.create({
方框:{
填充:18,
背景颜色:'白色',
边界半径:20
}
});
导出默认Btn;
在页面中,你想让Btn像这样使用它

<Btn style={styles.items} touch="on" onPress={props.getProductsRequest}>
               <Text  style={styles.itemTxt}> some thex</Text>
        </Btn>

一些thex

注意touch=on

您需要做的是存储按钮的活动状态,默认状态为第一个按钮的名称

一旦您这样做了,您就可以为选中的按钮设置一个活动类名

onClick
按钮事件更新
activeButton
状态

const button_Data = [
  {
    name: "Name",
    value: "name"
  },
  {
    name: "Class",
    value: "class"
  },
  {
    name: "Age",
    value: "age"
  },
  {
    name: "Subjects",
    value: "subjects"
  },
  {
    name: "School",
    value: "school"
  }
];
function Stddata(props) {
  const [activeButton, setActiveButton] = useState(button_Data[0].name);
  const handleClick = e => {
    const name = e.target.name;
    setActiveButton(name);
  };
  return (
    <div>
      {button_Data.map(item => {
        const className = activeButton === item.name ? "active" : "";
        return (
          <div key={item.value}>
            <button
              className={`btn btn-outline-secondary mb-1 form-control text-left ${className}`}
              name={item.name}
              value={item.value}
              onClick={handleClick}
            >
              {item.name}
            </button>
          </div>
        );
      })}
    </div>
  );
}

export default Stddata;
const按钮\u数据=[
{
姓名:“姓名”,
值:“名称”
},
{
名称:“类”,
价值:“阶级”
},
{
姓名:“年龄”,
价值:“年龄”
},
{
名称:“受试者”,
价值观:“主体”
},
{
名称:“学校”,
价值:“学校”
}
];
功能Stddata(道具){
常量[activeButton,setActiveButton]=useState(按钮数据[0]。名称);
常量handleClick=e=>{
const name=e.target.name;
setActiveButton(名称);
};
返回(
{button_Data.map(项=>{
const className=activeButton==item.name?“活动”:“;
返回(
{item.name}
);
})}
);
}
导出默认Stddata;

嘿。。这不是我现在正在寻找的每一个按钮点击颜色正在改变。。我想要的是点击哪个按钮该按钮的颜色应该改变,上一次应该恢复正常OK我调整了答案和代码沙盒。它在做你要求的事情。您可能需要调整按钮的“hover”类,因为当将鼠标悬停在活动按钮上时,它仍然显示为灰色。但是使用state和
setState
的原则应该足以让你继续。嘿,你所做的与我的代码完全相反,我不能使用它,因为你又制作了一个按钮组件,我有一个不同的组件,它由其他stuf组成,你能做到我的代码是什么样子吗?在这一点上,我想我已经解释了如何完成你想要做的事情……我的codesandbox将按钮作为一个单独的组件,没错,但我写的答案没有。这不是你要找的吗?我认为你必须自己来处理这个问题,你尝试做的相对简单,是一个很好的学习体验…我有一个组件,其中我有所有按钮,我有其他组件,我在其中渲染这些按钮,但根据您的代码,没有按钮正确渲染我没有使用react nativvehey我有两个组件,一个是制作按钮,另一个是在triggerclick上进行渲染我正在传递我的click事件,您已经在一个组件中完成了此操作